BeginTrans、CommitTrans、RollbackTrans 方法學習

下面的“事務方法”管理在會話處理中的事務,會話由 object 所在處表示:

  • BeginTrans 開始一個新的事務。
  • CommitTrans 結束當前事務並保存所作的修改。
  • RollbackTrans 結束當前事務並將在 rdoEnvironment 對象中的數據庫還原到該當前事務開始時的狀態。

可以對 rdoConnection 對象使用事務方法-但是在這種情況下,事務的範圍只限於在 rdoConnection 下建立的 rdoResultsetrdoQuery 對象中。

語法

object.BeginTrans | CommitTrans | RollbackTrans

object 所在處代表一個對象表達式,其值爲“應用於”列表中的一個對象。

說明

當要將在會話中對數據庫所作的一系列改變作爲一個邏輯單元時,可以對 rdoEnvironmentrdoConnection 對象使用事務方法。也就是,一個操作集合既以一個集合爲單位完成,也以一個集合爲單位回滾。這樣,如果集合的任何操作失敗,則整個事務也失敗。事務還允許對數據庫作臨時改變- 該改變可用 RollbackTrans 方法取消。

一般,ODBC 驅動程序以下列兩種模式中的一種工作:

  • 自動提交模式:當沒有顯式地使用 BeginTrans 方法啓動一個事務,每一個被執行的操作在完成時都立即提交給數據庫。
  • 手工提交模式:當顯式地使用 BeginTrans 方法啓動一個事務時,或使用 ODBC SQLSetStmtOption 函數禁止 SQL_AUTO_COMMIT 模式時,或發送一個 SQL 語句啓動一個事務 (BEGIN TRANS) 時,所有操作都是事務中的一部分,並且不作修改地提交給數據庫,直到使用 CommitTrans 方法爲止。如果執行 CommitTrans,或使用 RollbackTrans 方法之前連接失敗,就取消這個操作-回滾。

注意 當使用遠程服務器時,如果該服務器象 Microsoft SQL Server 那樣支持分佈式的事務協調程序 (DTC),就可以初始化和控制跨越多個服務器的事務。也就是,如果在調用一個遠程過程的遠程服務器上調用一個過程,則 DTC 可以保證該操作被包括在初始化的事務中。詳細信息,

一般來說,當必須更新兩個或多個表中的行,並確保在所有的表中所作的改變或者都被完成(提交)、或者一點也不變(回滾)時,使用事務維護數據的完整性。例如,當將錢從一個帳戶轉到另一個帳戶時,需要從一個帳戶上減去一個數並將其加到另一個帳戶上。如果其中有一個修改失敗,帳戶就不會平衡。在修改第一行之前,先使用 BeginTrans 方法,然後,只要再有修改失敗,就可以使用 RollbackTrans 方法撤消所有的修改。在成功地修改了最後一行之後,就使用 CommitTrans 方法。

注意 在一個 rdoEnvironment 對象內,對於該 rdoEnvironment,事務總是全局的,並不只限於一個數據庫,或一個結果集。如果在一個 rdoEnvironment 事務內、在多個數據庫或結果集上完成操作,則 RollbackTrans 方法還原所有的在那些數據庫和結果集上的操作。

一旦使用 CommitTrans,就不能取消在該事務中所作的改變,不過若該事務嵌套在另一個要回滾的事務中除外。除非使用動作查詢直接執行 SQL 事務管理語句,否則事務不能嵌套。如果想模擬覆蓋的、無嵌套的範圍的事務,可以建立另外的 rdoEnvironment 對象包含併發的事務。

注意 可以使用包含事務語句的 SQL 動作查詢。例如,對於 Microsoft SQL Server,可以使用 SQL 語句,如,BEGIN TRANSACTION, COMMIT TRANSACTION 或 ROLLBACK TRANSACTION。這個技術支持 ODBC 驅動程序所不支持的嵌套事務。

如果不保存或者要回滾任何掛起的事務,就關閉 rdoEnvironment 對象,則事務會自動回滾。

如果不先使用 BeginTrans 方法就使用了 CommitTransRollbackTrans 方法,那麼不會產生錯誤。

有些數據庫不支持事務,在這些情況下,rdoConnection 對象或 rdoResultset 對象的 Transactions 屬性爲 False。爲了保證數據庫能支持事務,在使用 BeginTrans 方法之前,先檢查 rdoConnection 對象的 Transactions 屬性的值。如果對多個數據庫使用 rdoResultset 對象,則先檢查該 rdoResultset 對象的 Transactions 屬性。如果 rdoConnection rdoResultset 不支持事務,則這些方法將被忽略並且不產生錯誤。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章