事務處理
交易 界定在某一連線中執行的一系列數據存取作業的開頭和結尾。 受限於數據源的交易功能,Connection 物件也可讓您建立和管理交易。 例如,使用 Microsoft OLE DB Provider for SQL Server 存取 Microsoft SQL Server 上的資料庫,您可以為執行的命令建立多個巢狀交易。
ADO 確保由交易中操作引起的數據源變更要麼全部成功發生,要麼不發生。
如果您取消交易,或其其中一項作業失敗,結果會如同交易中沒有任何作業發生一樣。 數據源會維持在交易開始之前的狀態。
ADO 提供下列控制交易的方法:BeginTrans、CommitTrans,以及 RollbackTrans。 當您想要將源數據所做的一系列變更儲存或取消為單一單位時,請搭配 Connection 物件使用這些方法。 例如,若要在帳戶之間轉移資金,您會從其中一個減去金額,並將相同的金額新增至另一個帳戶。 如果任一個更新失敗,帳戶就不會再餘額。 在開啟中的交易中進行這些變更可確保所有變更要么全部完成,要么不會進行。
備註
並非所有提供者都支援交易。 確認提供者定義的屬性 「Transaction DDL」 出現在 Connection 物件的 Properties 集合中,指出提供者支援交易。 如果提供者不支援交易,則呼叫其中一種方法會傳回錯誤。
呼叫 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 只會影響最近開啟的交易;您必須先關閉或回復目前的交易,才能解析任何較高層級的交易。