程序中同时使用DAO和ADO连接数据库
2016-08-22 11:41
495 查看
因为项目中以前是用DAO连接ACCESS数据,现在需要连接sqlserver数据库。在网上找了下DAO方式连接SQLSERVER没有相关资源,好像不支持。于是就是ADO方式连接sqlserver数据库。
可以把ADO部分代码加进来后编译时弹出重复定义的错误。
大概如下
e:\wbt\源程序\aicc\debug\msado15.tlh(169) : error C2011: 'LockTypeEnum' : 'enum' type redefinition
e:\wbt\源程序\aicc\debug\msado15.tlh(212) : error C2011: 'DataTypeEnum' : 'enum' type redefinition
e:\wbt\源程序\aicc\debug\msado15.tlh(256) : error C2011: 'FieldAttributeEnum' : 'enum' type redefinition
e:\wbt\源程序\aicc\debug\msado15.tlh(277) : error C2011: 'EditModeEnum' : 'enum' type redefinition
e:\wbt\源程序\aicc\debug\msado15.tlh(285) : error C2011: 'RecordStatusEnum' : 'enum' type redefinition
还有类似以下的错误
error c2872: 'datatypeenum' : ambiguous symbol
error c2872: 'parameterdirectionenum' : ambiguous symbol
出现这些错误基本都是DAO和ADO中有重复定义。
在网口找了很久,大概知道方向,用名字空间或rename,但没有人具体说方案。
下面说下具体解决方案:
1.在你的ADO的头文件中加入以下
最后关键的一步,在代码中把用到的结构体DataTypeEnum,FieldAttributeEnum等改为重命名后的adoDataTypeEnum,adoFielAttributeEnum。最后编译成功。
有些奇怪的是代码用到的_RecordsetPtr的指针却不用改成上述重命名的ado_RecordsetPtr,但是你不用上述重命名又会编译失败。
可以把ADO部分代码加进来后编译时弹出重复定义的错误。
大概如下
e:\wbt\源程序\aicc\debug\msado15.tlh(169) : error C2011: 'LockTypeEnum' : 'enum' type redefinition
e:\wbt\源程序\aicc\debug\msado15.tlh(212) : error C2011: 'DataTypeEnum' : 'enum' type redefinition
e:\wbt\源程序\aicc\debug\msado15.tlh(256) : error C2011: 'FieldAttributeEnum' : 'enum' type redefinition
e:\wbt\源程序\aicc\debug\msado15.tlh(277) : error C2011: 'EditModeEnum' : 'enum' type redefinition
e:\wbt\源程序\aicc\debug\msado15.tlh(285) : error C2011: 'RecordStatusEnum' : 'enum' type redefinition
还有类似以下的错误
error c2872: 'datatypeenum' : ambiguous symbol
error c2872: 'parameterdirectionenum' : ambiguous symbol
出现这些错误基本都是DAO和ADO中有重复定义。
在网口找了很久,大概知道方向,用名字空间或rename,但没有人具体说方案。
下面说下具体解决方案:
1.在你的ADO的头文件中加入以下
#pragma warning (disable: 4146) // CG : In order to use this code against a different version of ADO, the appropriate // ADO library needs to be used in the #import statement #import "C:\Program Files\Common Files\System\ADO\msado15.dll" rename("EOF","adoEOF") rename("BOF","adoBOF") rename("DataTypeEnum","adoDataTypeEnum") \ rename("FieldAttributeEnum", "adoFielAttributeEnum") rename("ParameterDirectionEnum", "adoParameterDirectionEnum") rename("EditModeEnum", "adoEditModeEnum") \ rename("LockTypeEnum", "adoLockTypeEnum") rename("RecordStatusEnum", "adoRecordStatusEnum") \ rename("_RecordsetPtr","ado_RecordsetPtr") rename("_ConnectionPtr","ado_ConnectionPtr")\ rename("FieldPtr","ado_FieldPtr") using namespace ADODB; #pragma warning (default: 4146)
最后关键的一步,在代码中把用到的结构体DataTypeEnum,FieldAttributeEnum等改为重命名后的adoDataTypeEnum,adoFielAttributeEnum。最后编译成功。
有些奇怪的是代码用到的_RecordsetPtr的指针却不用改成上述重命名的ado_RecordsetPtr,但是你不用上述重命名又会编译失败。
相关文章推荐
- win7 sp1下编译使用了ado的程序,在winxp下无法连接数据库
- 使用ADO封装类的数据库程序开发实例[第二版] (下)
- VC++下使用ADO编写数据库程序
- VC++下使用ADO编写数据库程序(关键文章)
- 使用ADO GetChunk/AppendChunk 数据库存取二进制文件(如程序,图象等)
- VC++下使用ADO编写数据库程序
- 在DELPHI程序中使用ADO对象存取ODBC数据库
- VC++下使用ADO编写数据库程序
- 在DELPHI程序中使用ADO对象存取ODBC数据库
- 使用ADO编写数据库程序
- VC中用Ado接口代码连接和使用与数据库
- BCB使用ADO连接informix数据库的方法
- ODBC 、DAO 、ADO 、OLEDB 数据库连接方式区别及联系
- ODBC 、DAO 、ADO 、OLEDB 数据库连接方式区别及联系
- odbc dao ado oledb 数据库连接方式区别
- 在Visual Basic.NET使用ADO访问数据库(转for各种数据库连接)
- 如何通过使用 ADO.NET 2005 和 Visual C# 2005 或使用 ADO.NET 和 Visual C# .NET 连接到数据库并运行命令
- VC++下使用ADO编写数据库程序
- Rave使用体会(22):Rave中连接ADO数据库的例子
- VC++下使用ADO编写数据库程序(1)