BETA

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

投稿日:2019-07-03
最終更新:2019-07-03
※この記事は外部サイト(https://www.doraxdora.com/blog/2017/09/05/...)からのクロス投稿です

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

ではでは。

技術ブログをはじめよう Qrunch(クランチ)は、プログラマの技術アプトプットに特化したブログサービスです
駆け出しエンジニアからエキスパートまで全ての方々のアウトプットを歓迎しております!
or 外部アカウントで 登録 / ログイン する
クランチについてもっと詳しく

この記事が掲載されているブログ

@doraxdoraの技術ブログ 主に Java, C#, Python, Javascript の記事を載せていく予定。

よく一緒に読まれる記事

0件のコメント

ブログ開設 or ログイン してコメントを送ってみよう
目次をみる
技術ブログをはじめよう Qrunch(クランチ)は、プログラマの技術アプトプットに特化したブログサービスです
or 外部アカウントではじめる
10秒で技術ブログが作れます!