当我尝试使用64位DB2 ODBC驱动程序连接到DB2数据库时,API调用失败。使用32位驱动程序就可以了。
代码如下:
TCHAR dsn[] = _T("DSN=ODBCDB2"), connStringOut[100] = _T("");
SQLSMALLINT connStringOutSize = 0;
SQLRETURN rc = SQLDriverConnect(connHandle, NULL, (SQLTCHAR *)dsn, _tcslen(dsn), connStringOut, sizeof(connStringOut) / sizeof(TCHAR), &connStringOutSize, SQL_DRIVER_NOPROMPT);
//rc = -1
//Error message: Specified driver could not be loaded due to system error 1114: A dynamic link library (DLL) initialization routine failed. (IBM DB2 ODBC DRIVER - DB2COPY1, C:\PROGRA~1\IBM\SQLLIB\BIN\DB2CLIO.DLL)
环境详细信息:
- IBM DB2 v11.5.0.1077
- IBM DB2 ODBC驱动程序v11.5.0.1077(32位)
- ODBC v3.8
- VC ++(Visual Studio 2017)
- Windows 10 64位
非常感谢您的帮助。谢谢!
答案 0 :(得分:1)
最后我找到了问题的原因:
使用“ ODBC数据源管理器”添加DSN时,将在注册表中创建某些条目。条目之一是:
E
对于64位DSN,正确的DLL是 db2cli64.dll 。
不知道为什么尽管使用“ 64位ODBC数据源管理器”来创建DSN,但注册表中的DLL是错误的。
答案 1 :(得分:1)
有同样的问题。您必须在注册表中更改默认的DLL。 输入 regedit HKEY_CURRENT_USER-> Software-> ODBC-> ODBC.INI-> {您的DS名称}
将值 Driver 从 DB2CLIO.DLL 更改为 DB2CLI64.DLL