MS DTC 分布式事务

使用 OLE DB、开放式数据库连接 (ODBC)、ActiveX 数据对象 (ADO) 或 DB 库编写的应用程序可以使用 Transact-SQL 分布式事务,方法是发出 Transact-SQL 语句来启动和停止 Transact-SQL 分布式事务。OLE DB 和 ODBC 还包含在应用程序编程接口 (API) 级别对管理分布式事务的支持。OLE DB 应用程序和 ODBC 应用程序可以使用这些 API 函数管理包括其他组件对象模型 (COM) 资源管理器(支持 Microsoft 分布式事务处理协调器 [MS DTC] 事务但不支持 SQL Server 数据库引擎)的分布式事务。它们也可以使用 API 函数获取对包括多台运行数据库引擎 实例的计算机的分布式事务边界的更多控制。

ODBC 分布式事务

通过将连接属性 SQL_ATTR_AUTOCOMMIT 设置为 SQL_AUTOCOMMIT_OFF,然后调用 ODBC SQLEndTran 函数提交或回滚每个事务,可以控制 ODBC API 级别的本地事务。请勿使用这些函数管理 ODBC 应用程序中的分布式事务。而应该使用 MS DTC COM 方法:

  • 调用 DtcGetTransactionManager 连接到 MS DTC。
  • 调用 ITransactionDispenser::BeginTransaction 启动分布式事务并获取事务对象。
  • 对每个参与分布式事务的 ODBC 连接,调用 ODBC 函数 SQLSetConnectAttr,其中 fOption 设置为 SQL_COPT_SS_ENLIST_IN_DTC,vParam 保存通过 ITransactionDispenser::BeginTransaction 获得的事务对象的地址。
  • 当事务完成时,对于通过 ITransactionDispenser::BeginTransaction 获得的事务对象,不要调用 ODBC SQLEndTran 函数,而应调用 ITransaction::Commit 方法或 ITransaction::Rollback 方法。

OLE DB 分布式事务

控制 OLE DB 中的分布式事务的方法与控制本地事务的方法相似。若要控制本地事务,则 OLE DB 的使用者应该:

  • 使用 ITransactionLocal::StartTransaction 方法启动本地事务,并获得事务对象。
  • 对于通过 ITransactionLocal::StartTransaction 获得的事务对象,调用 ITransaction::Commit 方法或 ITransaction::Rollback 方法。

若要控制分布式事务,使用者应该:

  • 调用 DtcGetTransactionManager 连接到 MS DTC。
  • 调用 ITransactionDispenser::BeginTransaction 启动分布式事务,并获取事务对象。
  • 对每个参与分布式事务的连接,调用分布式事务对象的 ITransactionJoin 接口。
  • 对分布式事务对象调用 ITransaction::Commit 方法或 ITransaction::Rollback 方法,完成该事务。

请参阅

其他资源

Supporting Distributed Transactions
Performing Distributed Transactions

帮助和信息

获取 SQL Server 2005 帮助