強大的跨數據庫訪問組件 UniDAC使用教程:實現事務支持

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,Commit,Rollback和其他方法管理。每次當你準備開始一個事務時,你都應該檢查它是否處於活動狀態。你可以使用InTransaction屬性執行此操作。當事務處於活動狀態時調用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方法的參數來自定義每個顯式啟動的事務的行為。你可以指定事務的隔離級別以及此事務是否可編輯。StartTransaction主題中有關於這些參數的更詳細說明。

UniDAC還支持使用Savepoints。Savepoint方法允許你在事務中定義命名保存點。你可以使用RollbackToSavepoint方法中的保存點名稱將數據庫中的更改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組件控制。您可以使用AddConnection方法將連接添加到分佈式事務上下文。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;

↓↓↓


分享到:


相關文章: