如何使用 DB2 資料庫執行交易

交易是結合成一個邏輯工作單元的資料庫作業群組,可用來控制和維護每個資料庫的一致性和完整性,即使系統中可能發生的錯誤。 交易是由一系列 SQL SELECT、INSERT、UPDATE 或 DELETE 子句所組成。 如果在交易期間沒有發生任何錯誤,交易中的所有修改都會成為資料庫的永久部分。 如果發生錯誤,則不會對資料庫進行任何修改。

當交易為單一階段交易,且直接由資料庫處理時,系統便會將該交易視為本機交易。 當交易由交易監視器進行協調,並使用保全機制 (如兩階段認可) 進行交易解析時,系統便會將該交易視為分散式交易。

注意

交易在伺服器上執行時效率最高。 如果您使用SQL Server資料庫來大量使用明確交易,您應該考慮使用 Transact-SQL BEGIN TRANSACTION 語句將它們寫入為預存程式。

您可以使用 物件控制交易 MsDb2Connection 。 您可使用 BeginTransaction 方法來起始本機異動。 一旦您開始交易之後,就可以使用該 Transaction 物件的 屬性 MsDb2Command 在該交易中登記命令。 然後,您可根據異動元件的成敗,來認可或復原對資料來源所做的修改。

交易有三個基本命令:BEGIN、COMMIT 和 ROLLBACK。 BEGIN 語句會標示交易的開頭。 BEGIN 語句之後嘗試的所有程式都會被視為交易的一部分,由 COMMIT 語句完成,或由 ROLLBACK 語句取消。

執行交易

  1. 呼叫 MsDb2Connection.BeginTransaction 以標記交易的開頭。

    BeginTransaction 會傳回交易的參考。 保留此參考,以便您將它指派給在交易中登記的命令。

  2. 將交易指派給 MsDb2Command.Transaction 要執行的 。

    如果在具有使用中交易的連接上執行命令,而且 Transaction 物件尚未指派給 TransactionCommand 屬性, MsDb2Exception 則會擲回 。

  3. 執行必要的命令。

  4. 呼叫 MsDb2Transaction.Commit 以完成交易,或呼叫 MsDb2Transaction.Rollback 以取消交易。

    如果在執行 CommitRollback 方法之前關閉或處置連接,則會復原異動。

    下列程式碼範例示範如何執行交易。

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  
  

另請參閱

使用 Managed Provider for DB2