プログラマーな日々

I'm a Cloud Architect and Developer, and a trainee of the network engineer training course. I have certified by AWS and Cisco (SAA/SOA/DVA/CCNA). I especially have highly motivated to reduce toils.

usingステートメントを使えばSqlTransactionの明示的なRollbackは不要

どういうこと?

SqlTransactionのインスタンスをusingステートメントのスコープで囲めば、例外発生時に自動的にRollbackしてくれます。Try-Catchによる明示的なRollbackは不要です。

どうして?

usingステートメントのスコープを抜けるときにSqlTransactionのDisposeが呼ばれます。Dispose内ではCommitされていなければRollbackが呼ばれます。

どうすれば?

こんなソースコードになります。

using(SqlConnection connection = new SqlConnection([接続文字列])) {
    connection.Open();
    using(SqlTransaction transaction = connection.BeginTransaction())
    using(SqlCommand command = new SqlCommand([クエリー])) {
        command.ExecuteNonQuery();
        transaction.Commit();
    }
}