• ベストアンサー

複数のSQL文を一つのトランザクションで行いたい(SQL Server)

Visual Basic 2005 から SQL Server に接続してINSERTやUPDATE処理を行いたいのですが、トランザクション処理の記述方法が分かりません。 コネクションオープン トランザクション開始  クラスA呼び出し(INSERTやUPDATEの処理記述)  クラスB呼び出し(INSERTやUPDATEの処理記述)  … コミット(またはロールバック) トランザクション終了 コネクションクローズ 上記の様に、いくつかのクラスに分けて記述したINSERTやUPDATEの処理を、一つのトランザクションで行いたいです。 コネクションやトランザクションを引数とすればよいのでしょうか?

質問者が選んだベストアンサー

  • ベストアンサー
  • tomo316
  • ベストアンサー率35% (51/142)
回答No.1

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だと途中でこけるとどうなるか保証できない。 トランザクションを意識するのであれば、ストアードが一番。

noname#251034
質問者

お礼

アドバイスありがとうございます。 参考になりました。

その他の回答 (1)

  • unamana19
  • ベストアンサー率62% (56/89)
回答No.2

Visual Basic 2005であれば、TransactionScopeを利用すると あまり意識せずにトランザクションを実装できます。 ただし、MSDTCが起動されているのが前提になりますけどね。

noname#251034
質問者

お礼

アドバイスありがとうございます。 参考になりました。

関連するQ&A