IBM .net驱动程序找不到db2locale.dll

时间:2013-02-20 17:33:17

标签: .net dll db2 informix

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

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

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

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驱动程序似乎在后台使用了 lot 的DB2连接代码,在其他项目中,使用设计器生成的数据集,我只能使用DB2连接器类型连接到我的Informix数据库。因此,DB2标记,即使它与DB2相关的原因并不是很明显。

1 个答案:

答案 0 :(得分: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)。

其中一个使用Informix本机(SQLI)协议,另一个使用DRDA协议。 具有本机协议的IBM Informix .NET驱动程序是IBM Informix Client SDK的一部分 使用DRDA协议的协议是IBM DB2数据服务器驱动程序包的一部分。

现在,IBM Informix Client SDK在安装过程中也包含IBM DB2数据服务器驱动程序包作为可选组件。