ADO连接数据库出现错误码 0x80004003

  有一天客户现场连接数据库时反馈报错误码0x80004003。 一看是无效的指针,然后定位到在创建实例时全部都失败了。

m_ptrCommand.CreateInstance(__uuidof(Command));    
m_ptrRecordset.CreateInstance(__uuidof(Recordset));    
m_ptrConnection.CreateInstance(__uuidof(Connection));    
if(m_ptrCommand==NULL)    
{    
	m_strErrorMsg   = _T("数据库命令对象创建失败");    
	return  false;    
}    
if(m_ptrRecordset==NULL)    
{    
	m_strErrorMsg   = _T("数据库记录集对象创建失败");    
	return  false;    
}    
if(m_ptrConnection==NULL)    
{    
	m_strErrorMsg   = _T("数据库连接对象创建失败");    
	return  false;    
}

  但是为什么如此,第一反应是ado未进行初始化,但是再看代码中也加入了  CoInitialize(NULL)初始化代码。 百思而不得姐,从而三问度娘。客户确实是xp机器是不是缺少KB983246补丁,缺少对ado连接的支持。但是都一一排除。再从头分析,绝大部分安装现场不出问题,而在这里ado创建实例失败。 我程序中用到的是

#import "c:\program files\common files\system\ado\msado15.dll" no_namespace rename ("EOF", "adoEOF")   

  由此分析应该是这里出的问题,应该是win7和xp的msado15.dll不同。我把客户现场XP系统下包含msado15.dll的文件夹ado,替换掉我本地win7下的ado文件夹。然后重新编译程序,再在xp下应用,完美解决。

不过为什么会这样?

  是因为ADO向下兼容的问题,使用xp的ADO低版本在高版本大多能运行,反之则不行。

  WIN7 ADO的文件: msado15.dll,版本:6.1

  XP   ADO的文件: msado15.dll,版本:2.81

那问题随之而来,如何让ADO兼容所有的系统呢?

#import "msado15.dll" no_namespace  rename ("EOF",  "adoEOF")     

把代码改成这样,然后把xp的msado15.dll复制到工程目录。 这样就能同时兼容xp和win7.

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值