データセットとコマンドをトランザクションする

サンプルコード

Imports System.Data.SqlClient

Sub Main()
  Dim ConectStr As String = "適当な接続文字を入れてください"
  Dim conect As New SqlConnection(ConectStr)
  Dim command As New SqlCommand("Select * From Table1", conect)
  Dim adpt As New SqlDataAdapter(command)
  Dim Builder As New SqlCommandBuilder(adpt)
  Dim Ds As New DataSet()
  Dim Dt As DataTable
  adpt.Fill(Ds, "test1")
  Dt = Ds.Tables("test1")
 
  Dim newRow As DataRow = Dt.NewRow()
  newRow("Id") = 11
  newRow("Name") = "入ってるかな??"
  Dt.Rows.Add(newRow)
 
  conect.Open()
  '①
  Dim tran As SqlTransaction = conect.BeginTransaction()
  command.Transaction = tran
  Try
    command.CommandText = "INSERT INTO Table1 (Id, Name) VALUES (11, 'Test')"
    command.ExecuteNonQuery()
    '②
    adpt.SelectCommand.Transaction = tran
    adpt.Update(Dt)
    '③
    tran.Commit()
  Catch ex As Exception
    MsgBox(ex.Message)
    '④
    tran.Rollback()
  End Try
  conect.Close()
End Sub

①の部分でトランザクションオブジェクトを作ります。データベースに接続されている状態じゃないと作れないので気を付けてください。

次に、command.Transaction = tran でトランザクションを開始します。そして一連の処理をTry文でくくります。②の部分でデータセットのアダプタにトランザクションを設定します。これでデータセットからの更新時もSQL文と同じトランザクションでいけます。

何かしらのエラーが出れば、④の部分のロールバックしトランザクション前の状態に戻します。何もなければ、トランザクションをコミット(③)して終了です。