【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 指定されたバインディング制約に一致する型 ” の
コンストラクターの呼び出しで例外がスローされました」
が出て、動かなかったのですが
イントール済みのパッケージを入れ直しにより動作しました。
ありがとうございます。
参考にさせていただきます。
花様
ひとまずなんとか動作したようで良かったです。
また何かありましたらご遠慮なくご連絡ください。