UniDAC使用教程(十四):实现Transaction(事务)支持

翻译|使用教程|编辑:黄竹雯|2019-03-20 16:48:50.000|阅读 221 次

概述:Transaction(事务)是一个最小的不可再分的工作单元;通常一个事务对应一个完整的业务。本篇文章描述了如何在UniDAC中实现Transaction(事务)支持。

相关链接:

Universal Data Access Components (UniDAC)是一款通用数据库访问组件,提供了多个数据库的直接访问,如针对Windows的Delphi,C++Builder, Lazarus (以及 Free Pascal), Mac OS X, iOS,Android,Linux和64和32位的FreeBSD等等。我们将长期的经验集于这个小组件,提供统一的数据库连接访问(如oracle、微软SQL等等)。这意味着你可以在你的项目之间轻松地切换不同的数据库,以及创建跨数据库应用程序接口。

下载UniDAC最新版本

本篇文章描述了如何在UniDAC中实现Transaction(事务)支持。所以你应该要十分熟悉事务,才能很好的理解如何使用UniDAC来控制它们。

简单说一下Transaction(事务)是什么。事务是一个最小的不可再分的工作单元;通常一个事务对应一个完整的业务。

本地事务由TUniConnection组件的StartTransactionCommitRollback和其他方法管理。每次当你准备开始一个事务时,你都应该检查它是否处于活动状态。你可以使用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;

 


想要购买正版授权,或者获取更多UniDAC相关信息的朋友可以点击" 咨询在线客服 "~
慧都315特惠


标签:数据库服务器

本站文章除注明转载外,均为本站原创或翻译。欢迎任何形式的转载,但请务必注明出处,尊重他人劳动成果

登录 慧都网发表评论


暂无评论...

为你推荐

  • 推荐视频
  • 推荐活动
  • 推荐产品
  • 推荐文章
  • 慧都慧问
相关厂商
相关产品
UniDAC

UniDAC 是一个通用数据访问控件,支持几乎所有数据库格式,支持64位系统。

在线客服 在线QQ 电话咨询
400-700-1020
反馈
在线客服系统
live chat