IBM.Data.DB2.Core 连接问题

IBM.Data.DB2.Core connection problems

我在连接到 DB2 时总是出错。但仅限于已部署(msi 打包或单击一次)的应用程序。 (并且在同一台机器上)

当 运行 来自 Visual Studio 2017 年的应用时,无论是在调试还是发布版本中,一切都完美无缺。

我在 windows 10

上使用 nuget 的 libs 版本 1.3.0.100

我也在使用服务器的免费社区版本,这是最近在 win server 2012 r2 上下载安装的。

知道发生了什么事吗?这显然在 IBM 代码中...

我知道这没什么好继续的,但希望之前有人 运行 解决过这个问题。

堆在下面:

System.ArgumentOutOfRangeException: Length cannot be less than zero.
Parameter name: length
   at IBM.Data.DB2.Core.DB2ConnPool.Open(DB2Connection connection, String& szConnectionString, DB2ConnSettings& ppSettings, Object& ppConn)
   at IBM.Data.DB2.Core.DB2Connection.Open()
   at FrozenElephant.Symbiotic.DataProviderDB2.DatabaseTypesFactoryDB2.CreateConnection()
   at FormDatabaseConnection.btnTestConnection_Click(Object sender, EventArgs e) 

以答案的形式总结上面的发现,因为我可能暂时不会回来详细说明我的评论。

看起来这个问题不是代码错误的结果,而是目标机器上 DB2 连接器的配置失败,或者可能是应用程序的部署方式。需要通过查看连接器的可再分发部分的部署方式来确定哪个是罪魁祸首。

One user说他"was not referencing the assemblies correctly in my application"。这可能表明的一些可能性包括:

  • 与目标机器上的不同版本的 SDK 用于开发
  • 可能混合了多个版本或来源冲突的不同程序集
  • 程序集可能需要与应用程序一起部署,但并非所有程序集都需要。这可以通过为相关程序集设置 Copy Local = true 来解决。
  • 也可能是应用程序是针对与目标计算机上安装的客户端不同的平台(例如,x64 版本 x86)编译的。

Another person 提到了由类似但略有不同的原因引起的相同错误消息。这个说 "It seems to be an installation issue. Some files are not found."

在这种情况下,您可能会考虑重新安装客户端或以其他方式诊断安装。上面第二个link提到了一个工具,testconn20,在你安装的客户端中可能会有。您的连接字符串也可能提供一些提示;如果其中有任何内容可能取决于您安装的特定客户端或其功能,那将是另一个需要检查的地方。

编辑:

根据我在下面的评论,您可能缺少 ClickOnce 部署中的一些文件或文件夹。如果您确定其中包含 DB2 相关文件的 clidriver 文件夹是应用程序正常运行所必需的,那么您应该检查构建操作、复制到输出目录和 ClickOnce 应用程序文件设置。最后一个可能是关键。要检查这一点,请转到项目属性中的发布:

然后您可能需要检查"Show all files"以确认部署中每个文件的状态:

我遇到了完全相同的问题。我通过将目录 clidriver 放入工作目录来解决它。另外,我设置了以下环境变量:

#!/bin/bash
cd /opt/app/deployments/v1.0
export DB2_CLI_DRIVER_INSTALL_PATH="/opt/app/deployments/v1.0/clidriver"
export LD_LIBRARY_PATH="/opt/app/deployments/v1.0/clidriver/lib"
export PATH=$PATH:"/opt/app/deployments/v1.0/clidriver/bin:/opt/app/deployments/v1.0/clidriver/adm:/opt/app/deployments/v1.0/clidriver/lib"
export ASPNETCORE_URLS=http://+:5000
export ASPNETCORE_ENVIRONMENT=STAGING
export ASPNETCORE_INSTANCENAME=app01
/opt/app/runtime/aspnetcore-runtime-3.0.0-linux-x64/dotnet /opt/app/deployments/v1.0/Launcher.dll