C# で SQL Server に対して変更処理(INSERT, UPDATE, DELETE)を実行する方法をまとめてみました。
1行だけ実行
単一テーブルにしか影響しないようなSQLは1行だけ実行することになると思います。
このようなSQLを実行する場合、トランザクションを考慮せずそのまま ExecuteNonQuery()
を実行する方法が簡単です。
using System;
using System.Configuration;
using System.Data.SqlClient;
public void Insert1(string id, string password, string role)
{
// 接続文字列の取得
var connectionString = ConfigurationManager.ConnectionStrings["sqlsvr"].ConnectionString;
using (var connection = new SqlConnection(connectionString))
using (var command = connection.CreateCommand())
{
try
{
// データベースの接続開始
connection.Open();
// SQLの準備
command.CommandText = @"INSERT INTO T_USER (ID, PASSWORD, ROLE_NAME) VALUES (@ID, @PASSWORD, @ROLE_NAME)";
command.Parameters.Add(new SqlParameter("@ID", id));
command.Parameters.Add(new SqlParameter("@PASSWORD", password));
command.Parameters.Add(new SqlParameter("@ROLE_NAME", role));
// SQLの実行
command.ExecuteNonQuery();
}
catch (Exception exception)
{
Console.WriteLine(exception.Message);
throw;
}
finally
{
// データベースの接続終了
connection.Close();
}
}
}
トランザクション処理
複数テーブルに書き込みを行う場合、トランザクションを利用した書き込みになるかと思います。
通常はこちらの方が多い実装になるかと思います。
using System;
using System.Configuration;
using System.Data.SqlClient;
public void Insert2(string id, string password, string phone, string address)
{
// 接続文字列の取得
var connectionString = ConfigurationManager.ConnectionStrings["sqlsvr"].ConnectionString;
using (var connection = new SqlConnection(connectionString))
{
try
{
// データベースの接続開始
connection.Open();
using (var transaction = connection.BeginTransaction())
using (var command = new SqlCommand() { Connection = connection, Transaction = transaction })
{
try
{
// 親テーブルを挿入するSQLの準備
command.CommandText = @"INSERT INTO T_USER (ID, PASSWORD) VALUES (@ID, @PASSWORD)";
command.Parameters.Add(new SqlParameter("@ID", id));
command.Parameters.Add(new SqlParameter("@PASSWORD", password));
// 親テーブルを挿入するSQLの実行
command.ExecuteNonQuery();
// 子テーブルを挿入するSQLの準備
command.CommandText = @"INSERT INTO T_USER_EXT (ID, PHONE, ADDRESS) VALUES (@ID, @PHONE, @ADDRESS)";
////command.Parameters.Add(new SqlParameter("@ID", id)); // <- 上で既に @ID を追加済みのため再投入は不要。
command.Parameters.Add(new SqlParameter("@PHONE", phone));
command.Parameters.Add(new SqlParameter("@ADDRESS", address));
// 子テーブルを挿入するSQLの実行
command.ExecuteNonQuery();
// コミット
transaction.Commit();
}
catch
{
// ロールバック
transaction.Rollback();
throw;
}
}
}
catch (Exception exception)
{
Console.WriteLine(exception.Message);
throw;
}
finally
{
// データベースの接続終了
connection.Close();
}
}
}
[おまけ] DB変更を行うSQL
INSERT
INSERT INTO T_USER (
ID, PASSWORD
) VALUES (
@ID, @PASSWORD
);
UPDATE
UPDATE T_USER
SET
PASSWORD=@PASSWORD
WHERE
ID=@ID
;
DELETE
DELETE
FROM T_USER
WHERE ID=@ID
関連記事
C# を使って SQL Server に接続、操作する方法に関しては以下のような記事もあります。
あわせて参考に読んでいただけると理解が深まるハズ!