翻譯|使用教程|編輯:黃竹雯|2019-03-20 16:48:50.000|閱讀 1809 次
概述:Transaction(事務)是一個最小的不可再分的工作單元;通常一個事務對應一個完整的業務。本篇文章描述了如何在UniDAC中實現Transaction(事務)支持。
# 界面/圖表報表/文檔/IDE等千款熱門軟控件火熱銷售中 >>
相關鏈接:
Universal Data Access Components (UniDAC)是一款通用數據庫訪問組件,提供了多個數據庫的直接訪問,如針對Windows的Delphi,C++Builder, Lazarus (以及 Free Pascal), Mac OS X, iOS,Android,Linux和64和32位的FreeBSD等等。我們將長期的經驗集于這個小組件,提供統一的數據庫連接訪問(如oracle、微軟SQL等等)。這意味著你可以在你的項目之間輕松地切換不同的數據庫,以及創建跨數據庫應用程序接口。
本篇文章描述了如何在UniDAC中實現Transaction(事務)支持。所以你應該要十分熟悉事務,才能很好的理解如何使用UniDAC來控制它們。
簡單說一下Transaction(事務)是什么。事務是一個最小的不可再分的工作單元;通常一個事務對應一個完整的業務。
本地事務由TUniConnection組件的,,和其他方法管理。每次當你準備開始一個事務時,你都應該檢查它是否處于活動狀態。你可以使用屬性執行此操作。當事務處于活動狀態時調用StartTransaction將導致異常。 以下是一個簡短的示例,演示了使用本地事務的一般方法:
if not UniConnection.InTransaction then UniConnection.StartTransaction; try // Do some actions with database. For example: UniSQL1.Execute; UniSQL2.Execute; // Commit the current transaction to reflect changes in database if no errors were raised UniConnection.Commit; except // Rollback all changes in database made after StartTransaction if an error was raised UniConnection.Rollback; end;
激活事務后,所有操作(包括打開數據集)都將在當前事務的上下文菜單中執行,直到你提交或rollback(回滾)它為止。如果沒有啟動任何事務,則每個操作執行的更改將在操作完成后立即反映在數據庫中(所謂的AutoCommit模式)。 使用InterBase提供程序時,請注意AutoCommit屬性。默認情況下,AutoCommit屬性具有True值,導致在有任何數據修改時自動執行CommitRetaining或RollbackRetaining。 將屬性設置為False后,你可以自己管理事務。TUniConnection.AutoCommit屬性的優先級高于數據集的特定選項“AutoCommit”(TUniQuery,TUniTable)。如果TUniConnection.AutoCommit屬性設置為False, 則只能提交所有事務(不管數據集的特定選項“AutoCommit”值)。如果你希望大多數數據集自動提交事務,并且其中一些數據集可以手動控制事務,則應將TUniConnection.AutoCommit屬性設置為True,并且僅對具有手動事務控制的數據集,將特定選項“AutoCommit”值設置為False。
可以使用傳遞給重載的StartTransaction方法的參數來自定義每個顯式啟動的事務的行為。你可以指定事務的隔離級別以及此事務是否可編輯。主題中有關于這些參數的更詳細說明。
UniDAC還支持使用Savepoints。方法允許你在事務中定義命名保存點。你可以使用方法中的保存點名稱將數據庫中的更改rollback(回滾)到保存點創建時的實際狀態。調用RollbackToSavepoint可使當前事務保持活動狀態。
CommitRetaining和RollbackRetaining方法類似于Commit和Rollback,但它們保持當前事務處于活動狀態。這意味著你不需要像使用Commit和Rollback方法那樣調用StartTransaction來繼續處理事務。CommitRetaining和RollbackRetaining的功能由InterBase/Firebird/Yaffil服務器支持。 對于其他服務器,此功能通過在Commit或Rollback之后調用StartTransaction來模擬。
類似InterBase的服務器在單個連接中支持多個同時活動的事務,并且在打開游標時需要事務處于活動狀態。你可以不用管它,因為UniDAC封裝了這些特性,讓你以類似于與其他數據庫服務器一起工作的方式工作。 如果你想讓InterBase服務器的功能參與運行并行事務,你應該將幾個TUniTransaction組件放在TCustomUniDataSet的表單和設置屬性上,例如使用這些組件的Transaction和UpdateTransaction。Transaction和UpdateTransaction屬性僅用于InterBase提供程序。對于其他提供者,將忽略這些屬性。
UniDAC使用MTS管理Oracle和Microsoft SQL Server連接的分布式事務。分布式事務由TUniTransaction組件控制。您可以使用方法將連接添加到分布式事務上下文。MTS分布式事務協調器允許將連接混合到不同的服務器和不同的服務器類型。
begin UniConnection1.Connect; UniConnection2.Connect; UniTransaction.AddConnection(UniConnection1); UniTransaction.AddConnection(UniConnection2); UniTransaction.StartTransaction; UniSQL1.Connection := UniConnection1; UniSQL2.Connection := UniConnection2; try UniSQL1.Execute; UniSQL2.Execute; UniTransaction.Commit; except UniTransaction.Rollback; end; end;
本站文章除注明轉載外,均為本站原創或翻譯。歡迎任何形式的轉載,但請務必注明出處、不得修改原文相關鏈接,如果存在內容上的異議請郵件反饋至chenjj@fc6vip.cn