【WPF】「Oracle.DataAccess」を利用してデータ操作(追加、更新、削除)してみる
おはようございます。
今回は前回に引き続き、Oracle.DataAccess を使ってデータの登録、更新、削除をしてみます。
前回の記事はこちら。
今回も、Entity Framework などは使わずに OracleCommand で実装していますので、サクッと書きます。
スポンサーリンク
プログラムの修正
登録更新フォーム表示時の処理
SubWindow.xaml.cs
public SubWindow(CatModel SelectedCat) { InitializeComponent(); // データを取得 // 種別マスタを取得してコンボボックスに設定する using (var conn = new OracleConnection("Data Source=localhost;User Id=USER01;Password=USER01;")) { // データを取得 OracleCommand cmd = new OracleCommand("SELECT * FROM MSTKIND", conn); OracleDataAdapter da = new OracleDataAdapter(cmd); DataTable dt = new DataTable(); da.Fill(dt); // コンボボックスに値を設定 List<Kind> sources = new List<Kind>(); Kind k = new Kind(); k.KindCd = "00"; k.KindName = "指定なし"; sources.Add(k); foreach (DataRow row in dt.Rows) { k = new Kind(); k.KindCd = row["KIND_CD"].ToString(); k.KindName = row["KIND_NAME"].ToString(); sources.Add(k); } // コンボボックスに設定 this.cmb_kind.ItemsSource = sources; this.cmb_kind.DisplayMemberPath = "KindName"; if (SelectedCat == null) { // 追加処理の場合 this.Title = "追加"; this.btn_add.Visibility = Visibility.Visible; this.btn_mod.Visibility = Visibility.Collapsed; } else { this.SelectedCat = SelectedCat; // 更新処理の場合 this.Title = "更新"; this.btn_add.Visibility = Visibility.Collapsed; this.btn_mod.Visibility = Visibility.Visible; // 値の設定 this.txt_name.Text = SelectedCat.Name; foreach (ComboBoxItem i in this.cmb_sex.Items) { if (i.Content.ToString().Trim() == SelectedCat.Sex.Trim()) { this.cmb_sex.SelectedItem = i; } } this.txt_age.Text = SelectedCat.Age.ToString(); foreach (Kind kind in sources) { if (kind.KindCd == SelectedCat.Kind) { this.cmb_kind.SelectedItem = kind; break; } } this.txt_favorite.Text = SelectedCat.Favorite; } } }
追加処理
SubWindow.xaml.cs
private void btn_add_Click(object sender, RoutedEventArgs e) { this.IsCancel = false; // データを追加する using (var conn = new OracleConnection("Data Source=localhost;User Id=USER01;Password=USER01;")) { conn.Open(); // シーケンス列としていないので、 // 最初に件数を取得して No を計算する OracleCommand cmd = new OracleCommand("SELECT COUNT(*) FROM TBLCAT", conn); decimal cnt = (decimal)cmd.ExecuteScalar(); // クエリ作成 String query = "INSERT INTO TBLCAT VALUES (" + ++cnt + ", '" + this.txt_name.Text + "'" + ", '" + (this.cmb_sex.SelectedItem as ComboBoxItem).Content + "'" + ", " + this.txt_age.Text + ", '" + (this.cmb_kind.SelectedItem as Kind).KindCd + "'" + ", '" + this.txt_favorite.Text + "')"; // クエリ実行 cmd = new OracleCommand(query, conn); cmd.ExecuteNonQuery(); conn.Close(); MessageBox.Show("データを追加しました。"); } this.Close(); }
更新処理
private void btn_mod_Click(object sender, RoutedEventArgs e) { this.IsCancel = false; // データを更新する using (var conn = new OracleConnection("Data Source=localhost;User Id=USER01;Password=USER01;")) { conn.Open(); // クエリ作成 String query = "UPDATE TBLCAT SET" + " NAME = '" + this.txt_name.Text + "'" + ", SEX = '" + (this.cmb_sex.SelectedItem as ComboBoxItem).Content + "'" + ", AGE = " + this.txt_age.Text + ", KIND_CD = '" + (this.cmb_kind.SelectedItem as Kind).KindCd + "'" + ", FAVORITE = '" + this.txt_favorite.Text + "' " + "WHERE NO = " + SelectedCat.No; // クエリ実行 OracleCommand cmd = new OracleCommand(query, conn); cmd.ExecuteNonQuery(); conn.Close(); MessageBox.Show("データを更新しました。"); } this.Close(); }
削除処理
MainWindow.xaml.cs
private void del_button_Click(object sender, RoutedEventArgs e) { logger.Info("削除ボタンクリック"); // データを削除する using (var conn = new OracleConnection("Data Source=localhost;User Id=USER01;Password=USER01;")) { conn.Open(); int checkCount = 0; List<CatModel> list = this.dataGrid.ItemsSource as List<CatModel>; String query; foreach (CatModel cat in list) { if (cat.IsChecked) { checkCount++; // クエリ作成 query = "DELETE FROM TBLCAT WHERE NO = " + cat.No; // クエリ実行 OracleCommand cmd = new OracleCommand(query, conn); cmd.ExecuteNonQuery(); } } conn.Close(); if (checkCount == 0) { MessageBox.Show("削除対象にチェックがされていません。"); return; } } // データ再検索 searchData(); MessageBox.Show("データを削除しました。"); }
まとめ
そのうちまた違った方法で試してみたいと思いますが、
Oracleはとりあえずここまでです。
ではでは。
ディスカッション
コメント一覧
まだ、コメントがありません