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 方法,完成该事务。

 

来自 “ ITPUB博客 ” ,链接:http://blog.itpub.net/16436858/viewspace-494031/,如需转载,请注明出处,否则将追究法律责任。

转载于:http://blog.itpub.net/16436858/viewspace-494031/

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值