【WPF】PostgreSQL に接続してデータを操作(登録、更新、削除)してみる
おはようございます。
前回に引き続き PostgreSQL を使って、登録、更新、削除をしてみたいと思います。
前回の記事はこちら。
スポンサーリンク
プログラムの修正
追加処理の修正
MainWindow.xaml.cs
/// <summary> /// 追加ボタンクリックイベント /// </summary> /// <param name="sender"></param> /// <param name="e"></param> private void add_button_Click(object sender, RoutedEventArgs e) { logger.Info("追加ボタンクリック"); // データを追加する // PgDbContext に変更 //using (var conn = new SQLiteConnection("Data Source=SampleDb.sqlite")) using (var context = new PgDbContext()) { // データ作成 // テーブルはコンテキスト経由でアクセスする //var table = context.GetTable<Cat>(); Cat cat = new Cat(); 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
/// <summary> /// 更新ボタンクリックイベント /// </summary> /// <param name="sender"></param> /// <param name="e"></param> private void upd_button_Click(object sender, RoutedEventArgs e) { logger.Info("更新ボタンクリック"); // 選択チェック if (this.dataGrid.SelectedItem == null) { MessageBox.Show("更新対象を選択してください。"); return; } // データを更新する // PgDbContext に変更 //using (var conn = new SQLiteConnection("Data Source=SampleDb.sqlite")) using (var context = new PgDbContext()) { // 対象のテーブルオブジェクトを取得 // テーブルはコンテキスト経由でアクセスする //var table = context.GetTable<Cat>(); var table = context.Cats; // 選択されているデータを取得 Cat cat = this.dataGrid.SelectedItem as Cat; // テーブルから対象のデータを取得 var target = table.Single(x => x.No == cat.No); // データ変更 target.Favorite = "高いところ"; // DBの変更を確定 // メソッド変更 //context.SubmitChanges(); context.SaveChanges(); } // データ再検索 searchData(); MessageBox.Show("データを更新しました。"); }
削除処理
MainWindow.xaml.cs
/// <summary> /// 削除ボタンクリックイベント /// </summary> /// <param name="sender"></param> /// <param name="e"></param> private void del_button_Click(object sender, RoutedEventArgs e) { logger.Info("追加ボタンクリック"); // 選択チェック if (this.dataGrid.SelectedItem == null) { MessageBox.Show("削除対象を選択してください。"); return; } // データを削除する // PgDbContext に変更 //using (var conn = new SQLiteConnection("Data Source=SampleDb.sqlite")) using (var context = new PgDbContext()) { // 対象のテーブルオブジェクトを取得 // テーブルはコンテキスト経由でアクセスする //var table = context.GetTable<Cat>(); var table = context.Cats; // 選択されているデータを取得 Cat cat = this.dataGrid.SelectedItem as Cat; // テーブルから対象のデータを取得 var target = 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 指定されたバインディング制約に一致する型 ” の
コンストラクターの呼び出しで例外がスローされました」
が出て、動かなかったのですが
イントール済みのパッケージを入れ直しにより動作しました。
ありがとうございます。
参考にさせていただきます。
花様
ひとまずなんとか動作したようで良かったです。
また何かありましたらご遠慮なくご連絡ください。