【WPF】PostgreSQL に接続してデータを操作(登録、更新、削除)してみる
おはようございます。
前回に引き続き PostgreSQL を使って、登録、更新、削除をしてみたいと思います。
前回の記事はこちら。
スポンサーリンク
プログラムの修正
追加処理の修正
MainWindow.xaml.cs
| 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 |         /// <summary>         /// 追加ボタンクリックイベント         /// </summary>         /// <param name="sender"></param>         /// <param name="e"></param>         privatevoidadd_button_Click(objectsender,RoutedEventArgse)         {             logger.Info("追加ボタンクリック");             // データを追加する             // PgDbContext に変更             //using (var conn = new SQLiteConnection("Data Source=SampleDb.sqlite"))             using(varcontext=newPgDbContext())             {                 // データ作成                 // テーブルはコンテキスト経由でアクセスする                 //var table = context.GetTable<Cat>();                 Cat cat=newCat();                 cat.No=5;                 cat.No=5;                 cat.Name="こなつ";                 cat.Sex="♀";                 cat.Age=7;                 cat.Kind="01";                 cat.Favorite="布団";                 // データ追加                 // コンテキスト経由でエンティティを追加                 //table.InsertOnSubmit(cat);                 context.Cats.Add(cat);                 // DBの変更を確定                 // メソッド変更                 //context.SubmitChanges();                 context.SaveChanges();             }             // データ再検索             searchData();             MessageBox.Show("データを追加しました。");         } | 
更新処理
MainWindow.xaml.cs
| 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 |         /// <summary>         /// 更新ボタンクリックイベント         /// </summary>         /// <param name="sender"></param>         /// <param name="e"></param>         privatevoidupd_button_Click(objectsender,RoutedEventArgse)         {             logger.Info("更新ボタンクリック");             // 選択チェック             if(this.dataGrid.SelectedItem==null)             {                 MessageBox.Show("更新対象を選択してください。");                 return;             }             // データを更新する             // PgDbContext に変更             //using (var conn = new SQLiteConnection("Data Source=SampleDb.sqlite"))             using(varcontext=newPgDbContext())             {                 // 対象のテーブルオブジェクトを取得                 // テーブルはコンテキスト経由でアクセスする                 //var table = context.GetTable<Cat>();                 vartable=context.Cats;                 // 選択されているデータを取得                 Cat cat=this.dataGrid.SelectedItem asCat;                 // テーブルから対象のデータを取得                 vartarget=table.Single(x=>x.No==cat.No);                 // データ変更                 target.Favorite="高いところ";                 // DBの変更を確定                 // メソッド変更                 //context.SubmitChanges();                                 context.SaveChanges();             }             // データ再検索             searchData();             MessageBox.Show("データを更新しました。");         } | 
削除処理
MainWindow.xaml.cs
| 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 |         /// <summary>         /// 削除ボタンクリックイベント         /// </summary>         /// <param name="sender"></param>         /// <param name="e"></param>         privatevoiddel_button_Click(objectsender,RoutedEventArgse)         {             logger.Info("追加ボタンクリック");             // 選択チェック             if(this.dataGrid.SelectedItem==null)             {                 MessageBox.Show("削除対象を選択してください。");                 return;             }             // データを削除する             // PgDbContext に変更             //using (var conn = new SQLiteConnection("Data Source=SampleDb.sqlite"))             using(varcontext=newPgDbContext())             {                 // 対象のテーブルオブジェクトを取得                 // テーブルはコンテキスト経由でアクセスする                 //var table = context.GetTable<Cat>();                 vartable=context.Cats;                 // 選択されているデータを取得                 Cat cat=this.dataGrid.SelectedItem asCat;                 // テーブルから対象のデータを取得                 vartarget=table.Single(x=>x.No==cat.No);                 // データ削除                 // メソッド変更                 //table.DeleteOnSubmit(target);                 table.Remove(target);                 // DBの変更を確定                 context.SaveChanges();             }             // データ再検索             searchData();             MessageBox.Show("データを削除しました。");         } | 
まとめ
サクッとした記事になりましたが、ひとまず PostgreSQL はここまでとして次回は Oracle を試してみたいと思います。
ソースはこちら
ではでは。


 https://www.doraxdora.com/blog/2017/08/08/post-1948/
 https://www.doraxdora.com/blog/2017/08/08/post-1948/








ディスカッション
コメント一覧
はじめまして、花と申します。
VisualStudio、WPF、C#と初めての開発で、とても参考になります。
データベースをPostgreSQLを利用しています。
プログラムを前回の利用とありますが
遡りながら確認しているのですが
また、はじめの方から進めようとも考えましたが
何が必要で、不必要なのか判断できず
うまく動かすことができない状況です。
完成形をGitHubで提供していただければとコメントさせて頂きました。
ご検討よろしくお願いします。
花様
いつもブログを観ていただきありがとうございます。
ご指摘の件、ご不便をおかけしました。
少しずつソースを GitHub に上げようとは思っていたのですが、なかなか手が回らずといった状況です。
申し訳ありませんが、もうしばらくお待ちいただけますか。
なるべく早く対応致します。
今後ともよろしくお願い致します。
返信ありがとうございます。
こちらこそ、よろしくお願いします。
心待ちにします。
花様
遅くなり申し訳ありませんでした。
記事のまとめ部分に GitHub へのリンクを掲載しました。
ご確認いただければと思います。
今後もよろしくお願いします。
サンプルありがとうございます。
デバック時に「XamlParseException 指定されたバインディング制約に一致する型 ” の
コンストラクターの呼び出しで例外がスローされました」
が出て、動かなかったのですが
イントール済みのパッケージを入れ直しにより動作しました。
ありがとうございます。
参考にさせていただきます。
花様
ひとまずなんとか動作したようで良かったです。
また何かありましたらご遠慮なくご連絡ください。