TableAdapterを利用してトランザクション処理を行う場合には、TransactionScopeを利用しますが、
MS DTC(Microsoft Distributed Transaction Coordinator)が利用できない場合など、TransactionScopeを利用しないでトランザクションを実装しなければ
ならない事があります。このときに、どうのようにTableAdapterを利用するのかを説明します。
以下、説明では、Northwindを利用しますので、適宜環境を整えてください。
■データソースを追加する
プロジェクトにデータソースを追加します。追加する内容は、NorthwindのCustomersテーブルです。

■TableAdapterに独自機能(トランザクション)を実装する
トランザクションを行うには、コネクションオブジェクトのBeginTransactionメソッドを実行してトランザクションを開始し、CommitまたはRollbackメソッドにて処理を確定
しなければなりません。これらをスムーズに行えるようにTableAdapterに独自のメソッドを実装します。
ここで威力を発揮するのが、Partialクラスです。Partialクラスを利用せずに、自動生成されたNorthwindDataSet.Designer.vbのコード内に実装することも可能ですが、
これをしてしまうと、Customersテーブルのレイアウトが変更になり、再生成してしまうと、せっかく独自で実装したコードが全て消えてしまいます。
なので、クラスを分離できるPartialクラスを利用して、独自コードを自動で変更されないように実装します。
コードを追加するには、

データテーブルの上で右クリック、「コードの表示」で表示されます。表示された時点では、DataTableのPartialクラスが表示されていますが、これらは適宜名前空間
・クラス名などを指定して利用して下さい。
今回は、TableAdapterのPartialクラスを作成するので、名前空間は「NorthwindDataSetTableAdapters」、クラス名は「CustomersTableAdapter」になります。
実装するコードは、
Imports System.Data.SqlClient
Namespace NorthwindDataSetTableAdapters
Partial Class CustomersTableAdapter
''' <summary>
''' コネクションをオープンする
''' </summary>
''' <returns>オープンされたコネクション</returns>
''' <remarks></remarks>
Public Function OpenConnection() As SqlConnection
If (Me._connection Is Nothing) Then
Me.InitConnection()
End If
If Me._connection.State <> ConnectionState.Open Then
Me._connection.Open()
End If
Return Me._connection
End Function
''' <summary>
''' コネクションをクローズする
''' </summary>
''' <remarks></remarks>
Public Sub CloseConnection()
Me._connection.Close()
End Sub
''' <summary>
''' トランザクションを開始する
''' </summary>
''' <param name="con">対象コネクション</param>
''' <returns>トランザクション</returns>
''' <remarks></remarks>
Public Function BeginTransaction(ByVal con As SqlConnection) As SqlTransaction
''トランザクション開始
Dim tran As SqlTransaction = con.BeginTransaction
''各コマンドにトランザクションをセット
If (Not (Me.Adapter.InsertCommand) Is Nothing) Then
Me.Adapter.InsertCommand.Transaction = tran
End If
If (Not (Me.Adapter.DeleteCommand) Is Nothing) Then
Me.Adapter.DeleteCommand.Transaction = tran
End If
If (Not (Me.Adapter.UpdateCommand) Is Nothing) Then
Me.Adapter.UpdateCommand.Transaction = tran
End If
Dim i As Integer = 0
Do While (i < Me.CommandCollection.Length)
If (Not (Me.CommandCollection(i)) Is Nothing) Then
CType(Me.CommandCollection(i), System.Data.SqlClient.SqlCommand).Transaction = tran
End If
i = (i + 1)
Loop
Return tran
End Function
End Class
End Namespace
このようになります。これは簡単な例なので、仕様により、色々な付加機能を実装することがありますので・・・
■利用方法
ボタンを押したら、新規Customerを追加する簡単な処理を、トランザクションを利用して実装する方法です。
Imports System.Data.SqlClient
Public Class Form1
Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) _
Handles Button1.Click
Using taCustomers As New NorthwindDataSetTableAdapters.CustomersTableAdapter
Dim con As SqlConnection = Nothing
Dim tran As SqlTransaction = Nothing
Try
con = taCustomers.OpenConnection
tran = taCustomers.BeginTransaction(con)
taCustomers.Insert("12345", "CompanyName", "ContactName", "ContactTitle", _
"Address", "City", "Region", "9999", "JP", _
"999-999-9999", "999-999-9999")
tran.Commit()
Catch ex As SqlException
tran.Rollback()
MessageBox.Show(ex.Message, "SQLエラー", _
MessageBoxButtons.OK, MessageBoxIcon.Error)
Catch ex As Exception
tran.Rollback()
MessageBox.Show(ex.Message, "一般エラー", _
MessageBoxButtons.OK, MessageBoxIcon.Error)
Finally
taCustomers.CloseConnection()
End Try
End Using
End Sub
End Class