3

我正在尝试将我的 .net 解决方案的 Git 存储库拉到同一台机器上的另一个文件夹中(只是为了确保它有效)。

在我使用创建IfxConnections 的项目中,当我尝试创建一个新的时,IfxConnection我得到一个DllNotFoundException,它由 IBM Informix 驱动程序抛出。

我收到的消息是“无法加载 DLL 'db2locale.dll':找不到指定的模块。(来自 HRESULT 的异常:0x8007007E)”并且堆栈跟踪(回读到构造函数调用)是:

at IBM.Data.Informix.UnsafeNativeMethods.IfxInteropAPP.sqloGetNormalizedLangFromLangId(Int16 lcid)
at IBM.Data.Informix.UnsafeNativeMethods.IfxLocale.sqloGetNormalizedLangFromLangId(Int16 lcid)
at IBM.Data.Informix.IfxResource.GetMsgPath(CultureInfo cultureInfo, String szResFileName)
at IBM.Data.Informix.IfxResource..ctor(CultureInfo cultureInfo, String szResFileName, String szMsgPath)
at IBM.Data.Informix.IfxResource..ctor(CultureInfo cultureInfo, String szResFileName)
at IBM.Data.Informix.IfxResources.GetResource(CultureInfo cultureInfo)
at IBM.Data.Informix.IfxResources.GetString(CultureInfo cultureInfo, String stringID)
at IBM.Data.Informix.Res.GetString(CultureInfo culture, String name)
at IBM.Data.Informix.ODC.InvalidArgument()
at IBM.Data.Informix.IfxConnPool.ReplaceConnectionStringParms(IfxConnection connection, String szValue, IfxConnSettings& pSettings, IfxConnSettingsInternal& pSettingsInternal, Boolean bAttach)
at IBM.Data.Informix.IfxConnection.set_ConnectionString(String value)
at IBM.Data.Informix.IfxConnection..ctor(String connectionString)

问题是,我的代码/项目没有直接引用这个 dll。我的代码IBM.Data.Informix在本地机器路径上引用C:\Program Files\IBM\IBM DATA SERVER DRIVER\bin\netf40_32\IBM.Data.Informix.dll,就像在我的所有其他项目中一样,以及在从中克隆了该存储库的存储库中。从存储库打开原始项目不会产生错误。

任何人都可以让我了解为什么会发生此错误以及我可以做些什么来解决它?

顺便说一句,IBM Informix 驱动程序似乎在后台使用了大量DB2 连接代码,以至于在使用设计器生成的数据集的其他项目中,我只能使用 DB2 连接器类型连接到我的 Informix 数据库. 因此是 DB2 标记,尽管它与 DB2 相关的原因还不是很明显。

4

1 回答 1

4

您使用的 IBM Informix .NET 驱动程序来自 IBM DB2 数据服务器驱动程序包;它不是本机 Informix .NET 提供程序。在理想情况下,如果 IBM DB2 数据服务器驱动程序包安装正确,那么您应该不会看到此错误。

如果您打算使用本机 Informix .NET 驱动程序,那么您可能需要取消引用项目中包含的当前二进制文件,然后引用本机 Informix .NET 驱动程序。本机 Informix .NET 提供程序的位置是 $INFORMIXDIR\bin\netf20\IBM.Data.Informix.dll

仅供参考: 有两种类型的 IBM Informix .NET 驱动程序,它们都具有相同的名称空间 (IBM.Data.Informix) 和相同的二进制名称 (IBM.Data.Informix.dll)。

One of them uses Informix native (SQLI) protocol and the other one uses DRDA protocol. The IBM Informix .NET drivers with native protocol is part of IBM Informix Client SDK The one that uses DRDA protocol is part of IBM DB2 Data Server Driver package.

Now IBM Informix Client SDK includes IBM DB2 Data Server Driver package also as an optional component during the installation.

于 2013-02-21T00:06:01.443 回答