rdoEnvironment 对象支持 BeginTrans, CommitTrans 和 RollbackTrans 方法,用于开始、提交或回滚 ODBC 分布式事务。在支持 DTC 技术的系统上,这些方法使用 Distributed Transaction Coordinator (DTC) 来实现。目前只有 Microsoft SQL Server 6.5 支持 DTC。rdoEnvironment 对象中的 rdoConnections 集合中的所有连接都将参与分布式事务。
Microsoft SQL Server 的新特性能够在 Microsoft Windows NT 以及基于 Microsoft Windows 95 的系统的网络上协调事务,利用 MS DTC,SQL Server 可以:
也可以从“服务器”菜单中选择“Distributed Transaction Coordinator”命令来使用 MS DTC。
在网络计算机系统上运行着一系列的分布式软件部件,Microsoft 分布式事务协调器能够确定发生竞争的事务处理。MS DTC 完全集成在 Microsoft SQL Server 6.5 中,而且在管理分布式事务的每台计算机上的 SQL Enterprise 管理器中提供一个事务管理器。
如果没有 DTC,或者当前的 ODBC 驱动程序不能处理分布式事务,这些方法将迫使 RDO 通过 rdoConnections 集合中的所有连接来串行地执行事务。但这些事务不是不可分割的,也就是说,对于其中一个 rdoConnection 的操作可能执行完了,而对于其它的却可能没有。在这种情况下,提交的操作不会回滚。因此,它们的成功或失败不是相互依赖的。
因为 rdoEnvironment 对象决定了应用程序中的事务作用域,所以提交一个 rdoEnvironment 事务也就提交了所有打开的 rdoConnection 数据库(在 rdoEnvironment 对象上,及其相对应的打开的 rdoResultset 对象上打开)上的所有挂起的事务。这并不意味着两阶段提交。而只是表示一个 rdoConnection 对象被安排提交所有挂起的事务,每次提交一个。
注意 ODBC 事务模式不支持嵌套的事务。也就是说,在前面的事务被提交或回滚之前,不能执行第二个 BeginTrans 方法。但是,如果 ODBC 数据源提供这种支持,那么可以使用 SQL 语句执行嵌套事务。所有的 Microsoft SQL Server 系统都提供该支持。
在使用 ODBC 事务时,事务不会跨越连接:在一个连接上开始并被提交的事务并不会影响其它连接上挂起的事务,即便是相同的服务器和数据库上的两个连接也不会相互影响。
事务操作一旦完成,rdoEnvironment 对象就会触发一个事件。这些事件可以用于与其它处理同步事务状态。BeginTrans、CommitTrans 及 RollbackTrans 方法被触发后,相应的事件也被触发。