- SqlConnectionとSqlTransactionを使用する方法:
using (SqlConnection connection = new SqlConnection(connectionString))
{
connection.Open();
using (SqlTransaction transaction = connection.BeginTransaction())
{
try
{
// トランザクション内で実行するSQLコマンドを作成する
SqlCommand command1 = new SqlCommand("INSERT INTO TableName (Column1, Column2) VALUES (Value1, Value2)", connection, transaction);
SqlCommand command2 = new SqlCommand("UPDATE TableName SET Column1 = NewValue WHERE Condition", connection, transaction);
// トランザクション内のコマンドを実行する
command1.ExecuteNonQuery();
command2.ExecuteNonQuery();
// トランザクションをコミットする
transaction.Commit();
Console.WriteLine("トランザクションが正常に完了しました。");
}
catch (Exception ex)
{
// トランザクションをロールバックする
transaction.Rollback();
Console.WriteLine("トランザクション中にエラーが発生しました: " + ex.Message);
}
}
}
- TransactionScopeクラスを使用する方法:
using (TransactionScope scope = new TransactionScope())
{
try
{
using (SqlConnection connection = new SqlConnection(connectionString))
{
connection.Open();
// トランザクション内で実行するSQLコマンドを作成する
SqlCommand command1 = new SqlCommand("INSERT INTO TableName (Column1, Column2) VALUES (Value1, Value2)", connection);
SqlCommand command2 = new SqlCommand("UPDATE TableName SET Column1 = NewValue WHERE Condition", connection);
// トランザクション内のコマンドを実行する
command1.ExecuteNonQuery();
command2.ExecuteNonQuery();
}
scope.Complete();
Console.WriteLine("トランザクションが正常に完了しました。");
}
catch (Exception ex)
{
Console.WriteLine("トランザクション中にエラーが発生しました: " + ex.Message);
}
}
以上が、C#でSQLトランザクションを使用する方法の例です。これらの方法を使用することで、データベース操作をトランザクション単位で実行し、データの整合性を保つことができます。