【问题标题】:IBM.Data.DB2.Core connection problemsIBM.Data.DB2.Core 连接问题
【发布时间】:2019-11-05 19:48:45
【问题描述】:

我在连接到 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) 

【问题讨论】:

  • btnTestConnection_Click() 中的代码是什么样的?
  • 只是用连接字符串打开一个连接,与 Dev/VS 中使用的相同。现在无法访问代码,但可以稍后提供。
  • 看起来someone else 也有同样的问题,并且归结为程序集引用。也许检查是否安装了相同版本的客户端,也许看看你是否在运行复制本地。我不熟悉这个特定的连接器,但这可能是一个线索。
  • 这里是another person,有类似的报告——安装似乎有某种问题,显然是在定位工厂类。
  • 谢谢,我稍后会研究这个。仅供参考,我的问题都发生在同一台机器上。如果有人想要/愿意,他们可以尝试该应用程序并连接到任何 DB2/LUW 数据库。 APP 只加载架构信息(poco 创建工具)。 frozenelephant.com/symbiotic/publish.htm

标签: .net db2 db2-luw


【解决方案1】:

以答案的形式总结上述发现,因为我可能有一段时间无法回过头来详细说明我的 cmets。

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

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

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

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

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

编辑:

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

那么你可能需要勾选“显示所有文件”来确认部署中每个文件的状态:

【讨论】:

  • @Eric-Schneider 看起来在 Windows 应用商店版本中,您有一个文件夹“clidriver”,它不在 ClickOnce 可执行安装目录中。它是否存在于您的调试或发布文件夹中?您是否可能在部署中遗漏了它?
  • 看起来就是这样,干得好伙计!现在我想知道为什么会有这样的混合结果。我猜msi项目构建有错误?
  • 为其他开发人员澄清:它缺少“clidriver”文件夹。所以似乎 MSI 项目没有找到它,所以我将文件夹复制到项目文件夹中。显示所有文件,右键单击“包含在项目中”
  • 文件夹超过69MB!真的需要整个文件夹吗?
  • 我不知道,但我会说我注意到 Windows 应用商店应用程序和 ClickOnce 在下载大小上的巨大差异——这是指向解决方案的原因之一。您需要对此进行调查,但很高兴听到您有前进的道路。
【解决方案2】:

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2021-01-16
    • 2020-08-26
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-10-01
    • 1970-01-01
    相关资源
    最近更新 更多