読者です 読者をやめる 読者になる 読者になる

プログラマーな日々

プログラマーをやっています。好きなツール:WorkFlowy、好きな言語:C#、好きなサービス:Backlog、好きなAWS:AWS Lambda。

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

.NET

どういうこと?

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();
    }
}