どういうこと?
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(); } }