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

プログラマーな日々

プログラマー兼SEです。好きな習慣:TDD、好きなツール:WorkFlowy、好きな言語:C#、好きなAWSのサービス:Data Pipeline。趣味は開発環境を改善することです。

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