SQLトランザクションのSQL Serverの使い方

SQL Serverでは、データベースのトランザクションを処理するためにSQLTransactionが用いられます。トランザクションとは、一連のデータベース操作がすべて正常に完了するか、すべてロールバックされる集合体のことです。

SqlTransactionを利用すると、一連のデータベース操作をすべて成功させるか、すべてロールバックできます。以下は、SqlTransactionを使用する手順です。

  1. SqlConnectionオブジェクトを作成し、データベース接続を開きます。
  2. SqlConnectionのBeginTransactionメソッドによりSqlTransactionオブジェクトを作成します。
  3. SqlCommandオブジェクトを使用して挿入、更新、削除などのデータベース操作の一連を実行し、SqlTransactionオブジェクトをSqlCommandのTransactionプロパティに渡します。
  4. 全ての操作が成功した場合は、SqlTransactionオブジェクトのCommitメソッドを呼び出してトランザクションをコミットします。いずれかの操作が失敗した場合は、SqlTransactionオブジェクトのRollbackメソッドを呼び出してトランザクションをロールバックします。
  5. SqlConnection オブジェクトを閉じます。

以下にサンプルコードを示します。

using (SqlConnection connection = new SqlConnection(connectionString))
{
    connection.Open();

    SqlTransaction transaction = connection.BeginTransaction();

    try
    {
        // 执行一系列的数据库操作
        using (SqlCommand command1 = new SqlCommand("INSERT INTO Table1 (Column1) VALUES (@Value1)", connection, transaction))
        {
            command1.Parameters.AddWithValue("@Value1", value1);
            command1.ExecuteNonQuery();
        }

        using (SqlCommand command2 = new SqlCommand("UPDATE Table2 SET Column2 = @Value2 WHERE Column3 = @Value3", connection, transaction))
        {
            command2.Parameters.AddWithValue("@Value2", value2);
            command2.Parameters.AddWithValue("@Value3", value3);
            command2.ExecuteNonQuery();
        }

        // 所有操作成功,提交事务
        transaction.Commit();
    }
    catch (Exception ex)
    {
        // 操作失败,回滚事务
        transaction.Rollback();
        Console.WriteLine("Error: " + ex.Message);
    }
}

上のサンプルでは、SqlConnectionオブジェクトを用いてデータベース接続を開き、BeginTransactionメソッドによりSqlTransactionオブジェクトを作成しています。

その後、tryブロック内で SqlCommandオブジェクトを使って一連のデータベース操作を実行し、SqlTransactionオブジェクトをSqlCommandのTransactionプロパティに渡します。

すべての操作が問題なく実施された場合、SqlTransaction オブジェクトのコミットメソッドを呼び出してトランザクションをコミットします。

いずれかの操作が失敗すると、catch ブロック内のコードが実行され、SqlTransaction オブジェクトの Rollback メソッドを呼び出してトランザクションがロールバックされます。

usingブロック終了後にSqlConnectionオブジェクトは自動的に閉じられます。

bannerAds