- ベストアンサー
複数のSQL文を一つのトランザクションで行いたい(SQL Server)
Visual Basic 2005 から SQL Server に接続してINSERTやUPDATE処理を行いたいのですが、トランザクション処理の記述方法が分かりません。 コネクションオープン トランザクション開始 クラスA呼び出し(INSERTやUPDATEの処理記述) クラスB呼び出し(INSERTやUPDATEの処理記述) … コミット(またはロールバック) トランザクション終了 コネクションクローズ 上記の様に、いくつかのクラスに分けて記述したINSERTやUPDATEの処理を、一つのトランザクションで行いたいです。 コネクションやトランザクションを引数とすればよいのでしょうか?
- みんなの回答 (2)
- 専門家の回答
質問者が選んだベストアンサー
Option Explicit Dim Cn As New ADODB.Connection Dim Cmd As New ADODB.Command Dim rst As New ADODB.Recordset >コネクションオープン >トランザクション開始 Cn.Execute "BEGIN TRANSACTION" Cn.Execute "set implicit_transactions off" > クラスA呼び出し(INSERTやUPDATEの処理記述) > クラスB呼び出し(INSERTやUPDATEの処理記述) … >コミット(またはロールバック) If 判定 Then Cn.Execute "COMMIT TRANSACTION" Else Cn.Execute "ROLLBACK TRANSACTION" End If >トランザクション終了 コミトまたはロールバックで終了 つまり、トランザクションはBEGIN TRANSACTIONで始まり、COMMIT TRANSACTIONで終わる。 >コネクションクローズ 注:全角表記あり できないことは無いですが、ストアードプロシジャで作ったほうが確実ですよ。 ADOだと途中でこけるとどうなるか保証できない。 トランザクションを意識するのであれば、ストアードが一番。
その他の回答 (1)
- unamana19
- ベストアンサー率62% (56/89)
Visual Basic 2005であれば、TransactionScopeを利用すると あまり意識せずにトランザクションを実装できます。 ただし、MSDTCが起動されているのが前提になりますけどね。
お礼
アドバイスありがとうございます。 参考になりました。
お礼
アドバイスありがとうございます。 参考になりました。