IBM.Data.DB2.Core连接问题

时间:2019-01-08 16:38:41

标签: .net db2 db2-luw

连接到DB2时,我总是收到错误消息。但仅适用于已部署(msi打包或单击一次)的应用程序。 (并且在同一台计算机上)

在Visual Studio 2017中运行应用程序时,无论是调试版本还是发行版,一切都完美运行。

我正在Windows 10上使用nuget的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) 

2 个答案:

答案 0 :(得分:1)

以答案的形式总结以上发现,因为我可能有一段时间不会再详细阐述我的评论了。

看来,此问题不是由代码错误引起的,而是由DB2连接器在失败的目标机器上的配置或者可能是应用程序的部署方式导致的。通过查看连接器的可重新分发部分的部署方式,可以确定是哪一个罪魁祸首。

One user说,他“未在我的应用程序中正确引用程序集”。这可能表明一些可能性,包括:

  • 与目标计算机上的版本相比,使用不同版本的SDK进行开发
  • 可能是多个版本或来源相互冲突的程序集混在一起
  • 程序集可能需要与应用程序一起部署,并非全部。可以通过为相关程序集设置Copy Local = true来解决此问题。
  • 也可能是在与目标计算机上安装的客户端(例如x64版本x86)不同的平台上编译了应用程序。

Another person提到了由相似但略有不同的原因引起的相同错误消息。这个人说:“这似乎是安装问题。找不到某些文件。”

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

编辑:

根据我在下面的评论,您可能缺少ClickOnce部署中的某些文件或文件夹。如果确定要使应用程序正常运行,必须具有其中包含DB2相关文件的clidriver文件夹,则应检查生成操作,复制到输出目录以及ClickOnce应用程序文件设置。最后一个可能是关键。要进行检查,请转到项目属性中的“发布”:

Location of ClickOnce application files settings

然后,您可能需要检查“显示所有文件”以确认部署中每个文件的状态:

Application files settings example

答案 1 :(得分:0)

我有完全相同的问题。我通过将目录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