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