首页 > 解决方案 > IBM.Data.DB2.Core connection problems

问题描述

I keep getting a error when connecting to DB2. But only on the deployed (msi packaged or click-once) app. (And on the same Machine)

Everything works perfectly when running the app from Visual Studio 2017. in either debug or release builds.

I'm using libs from nuget for version 1.3.0.100 on windows 10

I'm also using the free community version of the server, a recent download install on win server 2012 r2.

Any idea whats going on? This obviously inside IBM code...

I know this is not much to go on, but hoping someone has ran into this problem before.

Stack Below:

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) 

标签: .netdb2db2-luw

解决方案


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

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

一位用户说他“在我的应用程序中没有正确引用程序集”。这可能表明的一些可能性包括:

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

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

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

编辑:

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

ClickOnce 应用程序文件设置的位置

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

应用程序文件设置示例


推荐阅读