【C#】SqlClientを使用してUPDATE・INSERT・DELETE文を直接実行する

C#

前回の記事では、LocalDBに作成したテーブルに対してSELECT文を実行する方法について紹介しました。

今回はLocalDBのテーブルに対して直接UPDATE・INSERT・DELETE文を実行するシンプルな方法を紹介します。

スポンサーリンク

環境

  • Windows10
  • Visual Studio Community 2019
  • .NET Framework 4.8

※実行前のテーブル内容

プログラムの全文

using System.Data.SqlClient;

namespace DBConnectApp
{
    class Program
    {
        // 接続文字列
        private static string connectionString = @"
             Data Source=(localdb)\MSSQLLocalDB;Initial Catalog=testdb;Integrated Security=True;
                 Connect Timeout=30;Encrypt=False;TrustServerCertificate=False;
                ApplicationIntent=ReadWrite;
                 MultiSubnetFailover=False";


        static void Main(string[] args)
        {
            // Update文の実行
            Update();

            // Insert文の実行
            Insert();

            // Delete文の実行
            Delete();
        }

     // Update文を実行するメソッド
        public static void Update()
        {
            // IDが2のレコードのAgeを50に更新する
            var updateQuery = "UPDATE Test SET Age = 50 WHERE Id = 2";

            using (var connection = new SqlConnection(connectionString))
            using (var command = new SqlCommand(updateQuery, connection))
            {
                connection.Open();
                command.ExecuteNonQuery();
            }
        }

     // Insert文を実行するメソッド
        public static void Insert()
        {
            // パラメーターで中身を指定したレコードを追加
            var insertQuery = @"INSERT INTO Test(Id, Name, Age, Birthday) 
                                VALUES (@id, @name, @age, @birthday)";
            var name = "Nancy";
            var age = "28";
            var birthday = "1993/5/5";

            using (var connection = new SqlConnection(connectionString))
            using (var command = new SqlCommand(insertQuery, connection))
            {
                connection.Open();

                // パラメーターの追加
                command.Parameters.AddWithValue("@id", 4);
                command.Parameters.AddWithValue("@name", name);
                command.Parameters.AddWithValue("@age", age);
                command.Parameters.AddWithValue("@birthday", birthday);

                command.ExecuteNonQuery();
            }
        }

        // Delete文を実行するメソッド
        public static void Delete()
        {
            // Idが3のレコードを削除
            var deleteQuery = "DELETE FROM Test WHERE Id = 3";

            using (var connection = new SqlConnection(connectionString))
            using (var command = new SqlCommand(deleteQuery, connection))
            {
                connection.Open();
                command.ExecuteNonQuery();
            }
        }
    }
}

各処理ごとにメソッドを分けて、Mainメソッドから呼び出しています。

プログラムの解説

Update

        public static void Update()
        {
            // IDが2のレコードのAgeを50に更新する
            var updateQuery = "UPDATE Test SET Age = 50 WHERE Id = 2";

            using (var connection = new SqlConnection(connectionString))
            using (var command = new SqlCommand(updateQuery, connection))
            {
                connection.Open();
                command.ExecuteNonQuery();
            }
        }

Update文を実行するメソッドです。

SqlCommandクラスの第1引数(cmdText)に実行するクエリを渡して、ExecuteNonQueryメソッドを呼び出すことでSQLが実行されます。

ExecuteNonQueryメソッドはUpdate・Insert・Deleteなど更新系の時に使うものです。
戻り値として、SQL実行により影響を受けた行の数が得られます。

Updateメソッドを実行すると、Idが2のレコードのAgeが更新されました。
※左上の更新矢印ボタンを押すと画面が更新されます。

Insert

 public static void Insert()
        {
            // パラメーターで中身を指定したレコードを追加
            var insertQuery = @"INSERT INTO Test(Id, Name, Age, Birthday) 
                                VALUES (@id, @name, @age, @birthday)";
            var name = "Nancy";
            var age = "28";
            var birthday = "1993/5/5";

            using (var connection = new SqlConnection(connectionString))
            using (var command = new SqlCommand(insertQuery, connection))
            {
                connection.Open();

                // パラメーターの追加
                command.Parameters.AddWithValue("@id", 4);
                command.Parameters.AddWithValue("@name", name);
                command.Parameters.AddWithValue("@age", age);
                command.Parameters.AddWithValue("@birthday", birthday);
                command.ExecuteNonQuery();
            }
        }

Updateと基本的な構文は同じですが、SQL文の中に「@~」が含まれています。

これはパラメータクエリと呼ばれるもので、SQLインジェクション対策に用いられます。

command.Parameters.AddWithValue(“@パラメータ名”, 代入する値)と書くことでパラメータに値が代入されます。

今回はIdは直接指定し、それ以外を変数で指定しています。

Insertメソッドを実行してみると、Idが4となるレコードが追加されます。
各データもパラメーターの内容と一致していることがわかります。

Delete

        public static void Delete()
        {
            // Idが3のレコードを削除
            var deleteQuery = "DELETE FROM Test WHERE Id = 3";

            using (var connection = new SqlConnection(connectionString))
            using (var command = new SqlCommand(deleteQuery, connection))
            {
                connection.Open();
                command.ExecuteNonQuery();
            }
        }

これはシンプルですね。SQL文の中身以外はUpdateやInsertと同じ構文です。

実行してみると、Idが3のレコードが削除されました。

以上、SQLを直接実行してレコードの更新・挿入・削除を行う方法の紹介でした。

コンソールアプリではなく、ASP.NET Core MVCアプリ上でSqlClientを用いたDB操作を行う方法については以下の記事をご参照ください。

【参考書籍】

著:金城俊哉
¥2,851 (2022/09/28 21:00時点 | Amazon調べ)

コメント

タイトルとURLをコピーしました