Collection Contents 前へ 次へ PDF

ASA プログラミング・ガイド

.NET データ・プロバイダを使用したアプリケーションの開発

Transaction 処理


Adaptive Server Anywhere .NET プロバイダでは、AsaTransaction オブジェクトを使用して文をグループ化できます。各トランザクションは COMMIT または ROLLBACK で終了します。これらは、データベースの変更内容を確定したり、トランザクションのすべてのオペレーションをキャンセルしたりします。トランザクションが完了したら、さらに変更を行うための AsaTransaction オブジェクトを新しく作成する必要があります。この動作は、COMMIT または ROLLBACK を実行した後もトランザクションが閉じられるまで持続する ODBC や Embedded SQL とは異なります。

トランザクションを作成しない場合、デフォルトでは、Adaptive Server Anywhere .NET プロバイダはオートコミット・モードで動作します。挿入、更新、または削除の各処理後には COMMIT が暗黙的に実行され、オペレーションが完了すると、データベースが変更されます。この場合、変更はロールバックできません。

AsaTransaction オブジェクトの詳細については、AsaTransaction クラスを参照してください。

トランザクションの独立性レベルの設定 

デフォルトでは、トランザクションに対してデータベースの独立性レベルが使用されます。ただし、トランザクションを開始するときに IsolationLevel プロパティを使用してトランザクションに対して独立性レベルを指定できます。独立性レベルは、トランザクション内で実行されるすべてのコマンドに対して適用されます。

独立性レベルの詳細については、独立性レベルと一貫性を参照してください。

SELECT 文を入力するときに使用されるロックは、トランザクションの独立性レベルによって異なります。

ロックと独立性レベルの詳細については、クエリ時のロックを参照してください。

次の例では、SQL 文を発行してロールバックする AsaTransaction オブジェクトを使用します。このトランザクションは独立性レベル 2 (RepeatableRead) を使用します。この場合、修正対象のローに対して書き込みロックをかけて、他のデータベース・ユーザがこのローを更新できないようにします。

AsaTransaction オブジェクトを使用してコマンドを発行するには、次の手順に従います。

  1. AsaConnection オブジェクトを宣言して初期化します。

    AsaConnection conn = new AsaConnection(
        "Data Source=ASA 9.0 Sample" );
  2. 接続を開きます。

    conn.Open();
  3. Tee shirts の価格を変更する SQL 文を発行します。

    string stmt = "update product set unit_price =
        2000.00 where name = 'Tee shirt'";
  4. Command オブジェクトを使用して SQL 文を発行する AsaTransaction オブジェクトを作成します。

    トランザクションを使用して独立性レベルを指定できます。この例では、独立性レベル 2 (RepeatableRead) を使用して、他のデータベース・ユーザがローを更新できないようにします。

    AsaTransaction trans = conn.BeginTransaction(
        IsolationLevel.RepeatableRead );
    AsaCommand cmd = new AsaCommand( stmt, conn,
        trans );
    int rows = cmd.ExecuteNonQuery();
  5. 変更内容をロールバックします。

    trans.Rollback();

    AsaTransaction オブジェクトを使用して、データベースの変更内容をコミットまたはロールバックできます。トランザクションを使用しない場合、.NET データ・プロバイダはオートコミット・モードで動作し、データベースの変更内容をロールバックできません。変更内容を確定するには、次のコードを使用します。

    trans.Commit();
  6. AsaConnection オブジェクトを閉じます。

    conn.Close();

Collection Contents 前へ 次へ PDF