2019-07-03に投稿

【WPF】「Oracle.DataAccess」を利用してデータ操作(追加、更新、削除)してみる

引き続き、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はとりあえずここまでです。

ではでは。

Originally published at www.doraxdora.com

doraxdora

IT関係の仕事をしています/1985年生まれの東京在住/便利なサービスやツール漁りや料理などが好き/2017年~ブログやってます/自分でサービスとか作ってリリースしたい/何かありましたらお気軽にDMどうぞ

Crieitは個人で開発中です。 興味がある方は是非記事の投稿をお願いします! どんな軽い内容でも嬉しいです。
なぜCrieitを作ろうと思ったか

また、「こんな記事が読みたいけど見つからない!」という方は是非記事投稿リクエストボードへ!

こじんまりと作業ログやメモ、進捗を書き残しておきたい方はボード機能をご利用ください!

ボードとは?

関連記事

コメント