引き続き、Oracle.DataAccess を使ってデータの登録、更新、削除をしてみます。
前回の記事はこちら。
【WPF】「Oracle.DataAccess」を利用して取得したデータを DataGrid に表示してみる
今回も、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();
}
SubWindow.xaml.cs
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はとりあえずここまでです。
ではでは。
Crieitは誰でも投稿できるサービスです。 是非記事の投稿をお願いします。どんな軽い内容でも投稿できます。
また、「こんな記事が読みたいけど見つからない!」という方は是非記事投稿リクエストボードへ!
こじんまりと作業ログやメモ、進捗を書き残しておきたい方はボード機能をご利用ください。
ボードとは?
コメント