DB2 データベースを使用してトランザクションを実行する方法

トランザクションは、論理作業単位に結合されたデータベース操作のグループであり、システムで発生する可能性があるエラーにもかかわらず、各データベースの整合性と整合性を制御および維持するために使用されます。 トランザクションは、SELECT、INSERT、UPDATE、または DELETE SQL一連のトランザクションで構成されます。 トランザクション中にエラーが発生しない場合、トランザクションのすべての変更はデータベースの永続的な部分になります。 エラーが発生した場合、データベースに対する変更は行われません。

トランザクションは、単一フェーズであり、データベースによって直接処理される場合、ローカル トランザクションと見なされます。 トランザクション モニターによってコーディネートされ、トランザクションの解決にフェール セーフ機構 (2 フェーズのコミットなど) を使用しているトランザクションは、分散トランザクションであると見なされます。

Note

トランザクションは、サーバー上で実行するのが最も効率的です。 明示的なトランザクションを広範に使用する SQL Server データベースを使用している場合は、Transact-SQL BEGIN TRANSACTION ステートメントを使用してストアド プロシージャとして記述する必要があります。

オブジェクトを使用してトランザクションを制御 MsDb2Connection します。 ローカル トランザクションは、BeginTransaction メソッドを使用して開始できます。 トランザクションを開始したら、 オブジェクト Transaction の プロパティを使用して、そのトランザクションにコマンドを参加 MsDb2Command できます。 次に、トランザクションの内容が成功したか失敗したかに基づいて、データ ソースに対する変更をコミットまたはロールバックします。

トランザクションには、BEGIN、COMMIT、ROLLBACK の 3 つの基本的なコマンドがあります。 BEGIN ステートメントは、トランザクションの先頭をマークします。 BEGIN ステートメントの後に試行されたプロシージャはすべて、トランザクションの一部と見なされます。これは COMMIT ステートメントによって完了するか、ROLLBACK ステートメントによって取り消されます。

トランザクションを実行するには、次のようにします。

  1. を呼 MsDb2Connection.BeginTransaction び出して、トランザクションの開始をマークします。

    BeginTransaction はトランザクションへの参照を返します。 この参照を保持して、トランザクションに参加しているコマンドに割り当て可能にします。

  2. 実行する にトランザクションを MsDb2Command.Transaction 割り当てる。

    アクティブなトランザクションを持つ接続TransactionTransactionCommandMsDb2Exceptionでコマンドが実行され、 オブジェクトが の プロパティに割り当てられていない場合は、 がスローされます。

  3. 必要なコマンドを実行します。

  4. を呼 MsDb2Transaction.Commit び出してトランザクションを完了するか、 を呼び MsDb2Transaction.Rollback 出してトランザクションを取り消します。

    Commit または Rollback メソッドが実行される前に接続が終了または破棄されると、トランザクションはロールバックされます。

    トランザクションを実行する方法を次のコード例に示します。

static void TransactionConnection()  
{  
    MsDb2Connection myConnection new MsDb2Connection(@"file name=HOST.udl ");  
    myConnection.Open();  
    // Start a local transaction.  
    MsDb2Transaction myTrans = myConnection.BeginTransaction();  
    // Enlist the command in the current transaction.  
    MsDb2Command myCommand = myConnection.CreateCommand();  
    myCommand.Transaction = myTrans;  
    try  
    {  
        myCommand.CommandText = "Insert into Region (RegionID, RegionDescription) VALUES (100, 'Description')";  
        myCommand.ExecuteNonQuery();  
        myCommand.CommandText = "Insert into Region (RegionID, RegionDescription) VALUES (101, 'Description')";  
        myCommand.ExecuteNonQuery();  
        myTrans.Commit();  
        Console.WriteLine("Both records are written to database.");  
    }  
    catch(Exception e)  
    {  
        try  
        {  
           myTrans.Rollback();  
        }  
        catch (MsDb2Exception ex)  
        {  
            if (myTrans.Connection != null)  
            {  
                Console.WriteLine("An exception of type " + ex.GetType() +  
                    " was encountered while attempting to roll back the transaction.");  
            }  
        }  
  
        Console.WriteLine("An exception of type " + e.GetType() +  
            "was encountered while inserting the data.");  
        Console.WriteLine("Neither record was written to database.");  
    }  
    finally  
    {  
        Console.ReadLine();  
        myConnection.Close();  
    }  
}   
// End TransactionConnection  
  

参照

DB2 用マネージド プロバイダーの操作