ページの先頭行へ戻る
Symfoware Server V11.1.0 アプリケーション開発ガイド(.NET Data Provider編)
FUJITSU Software

A.3.10 複数のTableAdapterオブジェクトのデータ操作を1つのトランザクションにする方法

複数のTableAdapterオブジェクトのデータ操作を、1つのトランザクションにする方法について説明します。

複数のTableAdapterオブジェクトで同一のデータベースを操作する場合、1つのコネクションを複数のTableAdapterオブジェクトに設定することで、1つのトランザクションにすることができます。

参照

TableAdapterオブジェクトの作成方法は“3.2.2 TableAdapterの作成”を参照してください。

アプリケーションの手順

  1. Visual Studio.NET開発環境のGUIを操作したことでTableAdapterオブジェクトのソースを生成させます

  2. SymfowareConnectionオブジェクトでコネクションを接続します。詳細は、“A.3.1 接続および切断”を参照してください。

  3. TableAdapterオブジェクトを格納するDatasetのオブジェクトを作成します。

  4. 複数のTableAdapterオブジェクトを作成します。

  5. 1つのSymfowareConnectionオブジェクトを、複数のTableAdapterオブジェクトに設定します。

  6. SymfowareConnection.BeginTransactionメソッドでトランザクションを開始します。
    引数IsolationLevelに独立性水準(IsolationLevel.ReadCommitted)を設定します。
    SymfowareTransactionオブジェクトが作成されます。

  7. TableAdapterオブジェクトを利用して、データ操作を行います。

  8. データ操作が正常終了した場合、SymfowareTransaction.Commitメソッドを実行します。
    データ操作が異常終了した場合、SymfowareTransaction.Rollbackメソッドを実行します。

  9. コネクションを切断します。

エラー処理については、“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オブジェクトだけに設定するようにしてください。