IBM DB2 ODBC 驱动程序 64 位加载失败

IBM DB2 ODBC driver 64bit fails to load

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

Environment Details:

  • IBM DB2 v11.5.0.1077
  • IBM DB2 ODBC Driver v11.5.0.1077 (32-bit)
  • ODBC v3.8
  • VC++ (Visual Studio 2017)
  • Windows 10 64-bit

非常感谢任何帮助。谢谢!

终于找到了问题的原因:

使用 "ODBC Data Source Administrator" 添加 DSN 时,会在注册表中创建一些条目。其中一项是:

[Computer\HKEY_CURRENT_USER\Software\ODBC\ODBC.INI]
Driver REG_SZ C:\PROGRA~1\IBM\SQLLIB\BIN\DB2CLIO.DLL

对于 64 位 DSN,正确的 DLL 是 db2cli64.dll

不知道为什么用“64bit ODBC Data Source Administrator”创建了DSN,注册表中的DLL却是错误的。

有同样的问题。您必须更改注册表中的默认 DLL。 输入regedit HKEY_CURRENT_USER->Software->ODBC->ODBC.INI->{你的DS名称}

将值 DriverDB2CLIO.DLL 更改为 DB2CLI64.DLL