MSSQL Serverのストアドプロシージャでは、BEGIN TRANSACTION/COMMIT TRANSACTION
を使用してSQLトランザクションを使用していますが、それは最初とどのように異なり、SqlConnection.BeginTransaction()
経由でADO.NETを使用してコミットするのでしょうか?ストアドプロシージャレベルのSQLトランザクションとSqlConnectionレベルのSQLトランザクションの違いは何ですか?
6
A
答えて
3
ADO.NETでは、違いはありません。これは、SqlTransactionオブジェクトの場合、トランザクションがすでにサーバー上でロールバックされている場合、Commitメソッドが「失敗する」とMSDNで明示的に述べられています。
また、SQL Serverプロファイラは、接続で.BeginTransactionを実行するとすぐに、「SET TRANSACTION ISOLATION LEVEL READ COMMITTED; BEGIN TRAN」と表示します。
ただし、ADO(.NETではなく)ではありません。これは、事実上ネストされたトランザクション(クライアントの内部にネストされたサーバートランス)を使って素敵なシナリオを可能にしていました。私はそれをたくさん使ってきましたが、その場合の「クライアント取引」が何であるかを正確に定義することはできません。
2
複数のストアドプロシージャを連続して呼び出してロールバックできるようにする場合は、SqlConnection.BeginTransaction()を使用してコードからトランザクションを管理する必要があります。それ以外の場合は同じです。