交易處理
交易會針對跨連線執行的一系列資料存取作業,分隔其開頭和結尾。 取決於資料來源的交易功能,Connection 物件也可讓您建立和管理交易。 例如,您可以使用 Microsoft OLE DB Provider for SQL Server 存取 Microsoft SQL Server 上的資料庫,為所執行的命令建立多個巢狀交易。
ADO 可確保交易作業對資料來源所做的變更同時順利完成,或根本未發生。
如果您取消交易,或其中一項作業失敗,結果就如未發生任何交易作業一樣。 資料來源的狀態會與交易開始之前相同。
ADO 提供下列控制交易的方法:BeginTrans、CommitTrans 和 RollbackTrans。 當您想要將對來源資料所做的一系列變更作為一個單位來儲存或取消時,請透過 Connection 物件來使用這些方法。 例如,若要在帳戶之間轉帳,您會從一個帳戶減去金額,並將相同金額加到另一個帳戶。 如果任一更新失敗,帳戶將不再平衡。 在開啟的交易內進行這些變更,可確保變更全部通過或不通過。
注意
並非所有提供者都支援交易。 請確認 Connection 物件的 Properties 集合中顯示提供者定義的屬性 "Transaction DDL",以表示提供者支援交易。 如果提供者不支援交易,呼叫其中一個方法將會傳回錯誤。
呼叫 BeginTrans 方法之後,提供者將不再立即認可您所做的變更,直到您呼叫 CommitTrans 或 RollbackTrans 結束交易為止。
呼叫 CommitTrans 方法會儲存在連線上開啟的交易內所做的變更,並結束交易。 呼叫 RollbackTrans 方法會反轉在開啟的交易內所做的任何變更,並結束交易。 在沒有開啟的交易時,呼叫任一方法會產生錯誤。
根據 Connection 物件的 Attributes 屬性,呼叫 CommitTrans 或 RollbackTrans 方法可能會自動開始新交易。 如果 Attributes 屬性設定為 adXactCommitRetaining,提供者會在 CommitTrans 呼叫之後自動開始新交易。 如果 Attributes 屬性設定為 adXactAbortRetaining,提供者會在 RollbackTrans 呼叫之後自動開始新交易。
交易隔離等級
使用 IsolationLevel 屬性即可在 Connection 物件上設定交易隔離等級。 您下次呼叫 BeginTrans 方法時,設定才會生效。 如果您要求的隔離等級無法使用,提供者可能會傳回次高的隔離等級。 如需有效值的詳細資訊,請參閱 ADO 程式設計人員參考中的 IsolationLevel 屬性。
巢狀交易
對於支援巢狀交易的提供者,在開啟的交易內呼叫 BeginTrans 方法會開始新的巢狀交易。 傳回值表示巢狀層級:傳回值 "1" 表示您已開啟最上層交易 (即交易不會巢狀在另一個交易內),"2" 表示您已開啟第二層交易 (最上層交易內巢狀的交易),依此類推。 呼叫 CommitTrans 或 RollbackTrans 只會影響最近開啟的交易;您必須先關閉或復原目前交易,才能解決任何更上層的交易。