Web Service 使用分布式事务出错(OLE DB provider 'SQLOLEDB'无法启动分布式事务)

本文介绍了在WindowsXP SP2环境下,使用Sql Server 2000进行WebService开发时遇到的分布式事务问题及其解决方案。主要针对跨服务器执行SQL语句时出现的OLEDB错误,提供了详细的配置步骤。

 环境 Windows XP SP2 Sql Server 2000

    问题描述:在搭建Web Service时,访问了远程数据库的Link Server(即应用服务器访问了两台数据库服务器),执行SQL语句,如下:
      begin   transaction
    select CNCJ.dbo.Custmoer.TotalVol FROM  CNCJ.dbo.Customer c1 left join OrderHeaderID o1 on c1.OrderID = o1.OrderID  
WHERE or.CustomerProfileID = '188168' and o1.AggType = 'PPV' and o1.OrderMonth = '200805'
    commit   tran  
    go 
   
    CNCJ为数据库服务器上的Link Server
 
    出错   
    The operation could not be performed because the OLE DB provider 'SQLOLEDB' was unable to begin a distributed transaction.
    [OLE/DB provider returned message: New transaction cannot enlist in the specified transaction coordinator. ]
    OLE DB error trace [OLE/DB Provider 'SQLOLEDB' ITransactionJoin::JoinTransaction returned 0x8004d00a].
 
  解决办法
  1. 在数据库服务器上打开Sql Server的企业管理器,展开,右键“Local(Windows NT)”属性,确定“自动启动MSTDC”勾上。
  2. 管理工具->组件服务->计算机->我的电脑,右键属性,MSTDC选项卡,点击按钮“Security Configuration..”,勾上Newwork DTC Access, Allow Remote Clients、Allow Remote Administration、Allow Inbound、Allow Outbound、No Authentication Required、Enable Transaction Internet Protocol(TIP) Transactions、Enable XA Transactions,Account:为NT AUTHORITY/Newwork Service
  3. 管理工具->服务->找到Distributed Transaction Coordinator,双击,选择“Log on”选项卡,确保This account为NT AUTHORITY/Network Server。
### Microsoft OLE DB Provider for SQL Server 与 Microsoft OLE DB Driver for SQL Server 的区别 Microsoft OLE DB Provider for SQL Server(简称 SQLOLEDB)是一种早期的数据访问组件,专为与 SQL Server 数据库进行交互而设计。它基于 COM 技术,支持 ADO(ActiveX Data Objects)编程模型,广泛用于传统的 VB6 或 ASP 应用程序中。SQLOLEDB 提供了对 SQL Server 的基本访问功能,包括查询执行、事务处理以及参数化命令等,但其功能更新已基本停止,仅适用于旧版本的 SQL Server 环境中[^1]。 Microsoft OLE DB Driver for SQL Server(简称 MSOLEDBSQL)是 Microsoft 推出的现代 OLE DB 驱动程序,用于替代 SQLOLEDB。该驱动程序不仅提供了对 SQL Server 的全面支持,还引入了对最新 SQL Server 特性的兼容性,例如 Always Encrypted、JSON 数据类型、列存储索引等。MSOLEDBSQL 是一个原生客户端驱动程序,直接与 SQL Server 通信,不依赖其他中间层,因此在性能和功能上更具优势。此外,MSOLEDBSQL 还支持最新的加密协议和连接安全机制,适用于现代企业级应用程序开发和部署环境[^1]。 在连接字符串方面,两者的语法略有不同。以 SQLOLEDB 为例,连接字符串通常为: ```python Provider=sqloledb;Data Source=myServerName\theInstanceName;Initial Catalog=myDataBase;Integrated Security=SSPI; ``` 而对于 MSOLEDBSQL,连接字符串则为: ```python Provider=MSOLEDBSQL;Server=myServerName\theInstanceName;Database=myDataBase;Trusted_Connection=yes; ``` 尽管 SQLOLEDB 仍可在部分系统中使用,但由于其功能受限,推荐用户在新项目中优先使用 MSOLEDBSQL,以确保获得最佳的兼容性和安全性支持。 ###
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

晓梦庄子

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值