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