【C#】で行うDB接続とクエリ文の実行、値の保存と更新、削除
↑の続き
前はC#でDBへ接続して値を取得(SELECT)した。 新規保存や更新、削除(INSERTやUPDATE、DELETE)もそのままで行けるけど、 ExecuteReader()よりも ExecuteNonQuery()を使った方が良いらしい。 とりあえず以下の関数を前回の記事に載せた" class DBconnect "に追加する。
static public int ExecuteNonQuery(SqlConnection connection, String sql, Dictionary<String, String> param = null) { int rtn = -1; try { // データベースの接続開始 connection.Open(); Console.WriteLine(connection.State.ToString()); using (SqlCommand command = new SqlCommand() { CommandText = sql, Connection = connection }) { try { if (param != null) { foreach (string Key in param.Keys) { command.Parameters.AddWithValue(Key, param[Key]); } } // SQLの実行 rtn = command.ExecuteNonQuery(); } catch { throw; } } } catch { } return rtn; }
簡単に解説
解説といっても // SQLの実行 reader = command.ExecuteReader(); これを command.ExecuteNonQuery(); に変えただけ。
ExecuteNonQuery()は影響を受けた行数を返してくれる。 INSERTで1行追加したなら”1” UPDATEで5行のとある値を更新したなら”5” 条件(WHERE)を間違えてなにも変更が起きなかったらもちろん”0”が返される。
実装例
あとの使い方は大体同じ。 新規保存(INSERT)する場合はの場合は
using System; using System.Collections.Generic; using System.Text; using System.Data.SqlClient; namespace CheckSQL { class Program { static void Main(string[] args) { // DB接続 string connectionString = DBconnect.GetConnectionString(); StringBuilder sql = new StringBuilder(); // クエリ文実行 sql.AppendLine("INSERT INTO C_スケジュール"); sql.AppendLine(" ( 日付 , ID ) "); sql.AppendLine("VALUES"); sql.AppendLine("('2022/03/28', 1 ) "); using (SqlConnection connection = new SqlConnection(connectionString)) { if(RdoConnect.ExecuteNonQuery(connection, sql.ToString()) >= 0) { // 成功 }else { // 失敗 } } } } }
更新と削除(UPDATEとDELETE)もクエリ文だけ変えればいい。
締め
以上、前の記事と処理自体はほとんど同じなんだけど、そのせいでいぞ使うときパッと出てこないもので、記事に残しておこうと思った次第。
なにか質問等々ございましたらコメントいただければと思います。