IBM DB2 ODBC驱动程序64位无法加载

时间:2019-11-25 10:51:37

标签: db2 odbc

当我尝试使用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位
  •   

非常感谢您的帮助。谢谢!

2 个答案:

答案 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