使用ado来连接数据库,结果出现这样一些编译错误:
1>f:\c++pro\iocptser\debug\msado15.tlh(228) : error C2011: “LockTypeEnum”: “enum”类型重定义
1> c:\program files\microsoftsdks\windows\v6.0a\include\dbdaoint.h(109): 参见“LockTypeEnum”的声明
1>f:\c++pro\iocptser\debug\msado15.tlh(276) : error C2011: “DataTypeEnum”: “enum”类型重定义
1> c:\programfiles\microsoft sdks\windows\v6.0a\include\dbdaoint.h(138): 参见“DataTypeEnum”的声明
1>f:\c++pro\iocptser\debug\msado15.tlh(321) : error C2011: “FieldAttributeEnum”:“enum”类型重定义
1> c:\programfiles\microsoft sdks\windows\v6.0a\include\dbdaoint.h(127): 参见“FieldAttributeEnum”的声明
1>f:\c++pro\iocptser\debug\msado15.tlh(343) : error C2011: “EditModeEnum”: “enum”类型重定义
1> c:\programfiles\microsoft sdks\windows\v6.0a\include\dbdaoint.h(83): 参见“EditModeEnum”的声明
1>f:\c++pro\iocptser\debug\msado15.tlh(352) : error C2011: “RecordStatusEnum”: “enum”类型重定义
看样子它是跟WindowsSDK的某些头文件定义的类型冲突了,从dbdaoint.h我大致猜出它是跟dao库冲突了。我想既然我不用dao连接数据,就把它头文件注释掉好了,于是把stdafx.h下面的dao头文件相关代码注释掉:
#ifndef _AFX_NO_DAO_SUPPORT #include <afxdao.h> // MFC DAO 数据库类 #endif // _AFX_NO_DAO_SUPPORT
重新编译就没有这些编译错误了。
上面的是网上的给出的解决思路。但是我用的不是这种方法。
经过分析,发现在VC++的MFC框架下的预编译复选项中已经包含了数据库的相关操作(即MFC DAO 数据库类),这与使用的ado操作数据库用到的类中包含的数据类型有冲突,所以只能选其中的一个。我的解决办法是:重新创建了基于Win32的DLL项目,此时当然就不会包含DAO数据库类了,引入ado操作数据库就没有上面的错误了。