2013-02-20 48 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