2013-02-20 190 views
3

我试图拉我的.NET解决方案的Git仓库转移到同一台机器上的另一个文件夹(只是为了确保它的工作原理)。IBM .NET驱动程序找不到db2locale.dll

在我使用的项目中,创建了IfxConnection s,当我尝试创建新的IfxConnection时,得到了由IBM Informix驱动程序引发的DllNotFoundException

我收到的消息是“无法加载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。我的代码在本地计算机路径C:\Program Files\IBM\IBM DATA SERVER DRIVER\bin\netf40_32\IBM.Data.Informix.dll上引用IBM.Data.Informix,就像它在我所有其他项目中以及在已从中克隆此存储库的存储库中那样。从存储库中打开原始项目不会产生任何错误。

谁能给我一些见解为什么这个错误发生什么,我能做些什么来解决这个问题?

顺便说一句,在IBM Informix驱动程序似乎使用的DB2连接代码的很多在后台的范围内,在其他项目中,其中使用设计器生成的数据集,我只能连接到我Informix数据库使用DB2连接器类型。因此,DB2标签,即使它不是很明显,为什么这将是与DB2相关的。

回答

4

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

如果你的目的是要使用本机Informix的.NET驱动程序,那么你可能需要取消引用您已包含该项目,然后对本地Informix的.NET司机参考当前二进制。 本地的Informix .NET提供的位置是$ INFORMIXDIR \ BIN \ netf20 \ IBM.Data.Informix.dll

FYI: 有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客户端SDK包括IBM DB2数据服务器驱动程序包还作为安装过程中的可选组件。

+0

有多奇怪。您对DRDA协议完全正确,尽管直到您指出它之前,我并没有完全理解它们之间的差异。这里问题的根源似乎是,当从存储库中提取解决方案时,Visual Studio决定选择DRDA驱动程序,而不是原始项目中使用的本地驱动程序。非常感谢你,你的回答让我完全清楚。 – Frosty840 2013-02-21 09:00:42