使用 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 方法,完成该事务。
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· AI与.NET技术实操系列:基于图像分类模型对图像进行分类
· go语言实现终端里的倒计时
· 如何编写易于单元测试的代码
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
· 分享一个免费、快速、无限量使用的满血 DeepSeek R1 模型,支持深度思考和联网搜索!
· 基于 Docker 搭建 FRP 内网穿透开源项目(很简单哒)
· ollama系列01:轻松3步本地部署deepseek,普通电脑可用
· 25岁的心里话
· 按钮权限的设计及实现