複数のTableAdapterオブジェクトのデータ操作を、1つのトランザクションにする方法について説明します。
複数のTableAdapterオブジェクトで同一のデータベースを操作する場合、1つのコネクションを複数のTableAdapterオブジェクトに設定することで、1つのトランザクションにすることができます。
参照
TableAdapterオブジェクトの作成方法は“3.2.2 TableAdapterの作成”を参照してください。
アプリケーションの手順
Visual Studio.NET開発環境のGUIを操作したことでTableAdapterオブジェクトのソースを生成させます
SymfowareConnectionオブジェクトでコネクションを接続します。詳細は、“A.3.1 接続および切断”を参照してください。
TableAdapterオブジェクトを格納するDatasetのオブジェクトを作成します。
複数のTableAdapterオブジェクトを作成します。
1つのSymfowareConnectionオブジェクトを、複数のTableAdapterオブジェクトに設定します。
SymfowareConnection.BeginTransactionメソッドでトランザクションを開始します。
引数IsolationLevelに独立性水準(IsolationLevel.ReadCommitted)を設定します。
SymfowareTransactionオブジェクトが作成されます。
TableAdapterオブジェクトを利用して、データ操作を行います。
データ操作が正常終了した場合、SymfowareTransaction.Commitメソッドを実行します。
データ操作が異常終了した場合、SymfowareTransaction.Rollbackメソッドを実行します。
コネクションを切断します。
エラー処理については、“A.3.8 エラー処理”を参照してください。
' 1.GUIの操作によりTableAdapterオブジェクトのソースを生成(画面操作なので、ソース省略) ' SymfowareConnectionオブジェクトの生成 Dim con As New SymfowareConnection("DATA SOURCE=127.0.0.1;PORT=26551;" & "INITIAL CATALOG=TEST;USER ID=USER01;PASSWORD=PASS01") Dim trn As SymfowareTransaction = Nothing ' 2. コネクション接続 con.Open() ' 3. DataSetオブジェクトの作成 Dim dataset1 As New DataSet1() ' 4. TableAdapterオブジェクトの作成 Dim tbAdapter1 As New DataSet1TableAdapters.TABLE1TableAdapter() Dim tbAdapter2 As New DataSet1TableAdapters.TABLE2TableAdapter() ' 5. コネクションの設定 tbAdapter1.Connection = con tbAdapter2.Connection = con ' 6. トランザクション開始(独立性水準の設定) trn = con.BeginTransaction(IsolationLevel.ReadCommitted) Try ' 7. データ操作を行う処理を記述 tbAdapter1.Update(dataset1.TABLE1) tbAdapter2.Update(dataset1.TABLE2) ' 8. コミット trn.Commit() ' 9. コネクション切断 con.Close() ' エラー処理 Catch e1 As Exception ' 8. ロールバック ' エラー処理ルーチンを記述 trn.Rollback() End Try
注意
複数のTableAdapterオブジェクトのデータ操作を、1つのトランザクションにする場合、TableAdapterオブジェクトのソースを自動生成させるとき、[接続の追加]画面および[接続の変更]画面で、スキーマ名を指定しないようにしてください。スキーマ名を指定した場合は、自動生成されるSQL文にスキーマ名が修飾されません。アプリケーション実行時に設定するSymfowareConnectionオブジェクトに指定されたデフォルトスキーマ名でSQL文が実行されます。そのため、1つのコネクションを複数のTableAdapterオブジェクトに設定する場合、同一スキーマの表に対するTableAdapterオブジェクトだけに設定するようにしてください。