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

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

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

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

参照

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

アプリケーションの手順

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

  2. SymfowareConnectionオブジェクトでコネクションを接続します。詳細は、“A.2.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.2.8 エラー処理”を参照してください。

// 1.GUIの操作によりTableAdapterオブジェクトのソースを生成(画面操作なので、ソース省略)
    // SymfowareConnectionオブジェクトの生成
    SymfowareConnection con = new SymfowareConnection("DATA SOURCE=127.0.0.1;PORT=26551;" +
    "INITIAL CATALOG=TEST;USER ID=USER01;PASSWORD=PASS01");
    SymfowareTransaction trn = null;
    // 2. コネクション接続
    con.Open();
    // 3. DataSetオブジェクトの作成
    DataSet1 dataset1 = new DataSet1();
    // 4. TableAdapterオブジェクトの作成
    DataSet1TableAdapters.TABLE1TableAdapter tbAdapter1 =  new DataSet1TableAdapters.TABLE1TableAdapter();
    DataSet1TableAdapters.TABLE2TableAdapter tbAdapter2 =  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 (Exception e1)
    {
        // 8. ロールバック
        trn.Rollback();
        // エラー処理ルーチンを記述
    }

注意

複数のTableAdapterオブジェクトのデータ操作を、1つのトランザクションにする場合、TableAdapterオブジェクトのソースを自動生成させるとき、[接続の追加]画面および[接続の変更]画面で、スキーマ名を指定しないようにしてください。スキーマ名を指定した場合は、自動生成されるSQL文にスキーマ名が修飾されません。アプリケーション実行時に設定するSymfowareConnectionオブジェクトに指定されたデフォルトスキーマ名でSQL文が実行されます。そのため、1つのコネクションを複数のTableAdapterオブジェクトに設定する場合、同一スキーマの表に対するTableAdapterオブジェクトだけに設定するようにしてください。