複数のTableAdapterオブジェクトのデータ操作を、1つのトランザクションにする方法について説明します。
複数のTableAdapterオブジェクトで同一のデータベースを操作する場合、1つのコネクションを複数のTableAdapterオブジェクトに設定することで、1つのトランザクションにすることができます。
参照
TableAdapterオブジェクトの作成方法は“3.2.2 TableAdapterの作成”を参照してください。
アプリケーションの手順
Visual Studio.NET開発環境のGUIを操作したことでTableAdapterオブジェクトのソースを生成させます
SymfowareConnectionオブジェクトでコネクションを接続します。詳細は、“A.2.1 接続および切断”を参照してください。
TableAdapterオブジェクトを格納するDatasetのオブジェクトを作成します。
複数のTableAdapterオブジェクトを作成します。
1つのSymfowareConnectionオブジェクトを、複数のTableAdapterオブジェクトに設定します。
SymfowareConnection.BeginTransactionメソッドでトランザクションを開始します。
引数IsolationLevelに独立性水準(IsolationLevel.ReadCommitted)を設定します。
SymfowareTransactionオブジェクトが作成されます。
TableAdapterオブジェクトを利用して、データ操作を行います。
データ操作が正常終了した場合、SymfowareTransaction.Commitメソッドを実行します。
データ操作が異常終了した場合、SymfowareTransaction.Rollbackメソッドを実行します。
コネクションを切断します。
エラー処理については、“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オブジェクトだけに設定するようにしてください。