3

.net ソリューションの Git リポジトリを同じマシン上の別のフォルダーにプルしようとしています (動作を確認するためだけに)。

sを作成する私が使用するプロジェクトではIfxConnection、新しい を作成しようとすると、IBM Informix ドライバーによってスローされる がIfxConnection取得されます。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 を直接参照していないことです。私のコードは、他のすべてのプロジェクトと同様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 Data Server Driver パッケージのものです。ネイティブの Informix .NET プロバイダではありません。理想的には、IBM DB2 Data Server Driver パッケージが正しくインストールされていれば、このエラーは表示されません。

ネイティブの Informix .NET ドライバを使用する場合は、プロジェクトに含めた現在のバイナリを逆参照してから、ネイティブの Informix .NET ドライバへの参照を作成する必要がある場合があります。ネイティブの Informix .NET プロバイダーの場所は、$INFORMIXDIR\bin\netf20\IBM.Data.Informix.dll です。

参考までに: IBM Informix .NET ドライバには 2 つのフレーバーがあり、どちらも同じ名前空間 (IBM.Data.Informix) と同じバイナリ名 (IBM.Data.Informix.dll) を持っています。

1 つは Informix ネイティブ (SQLI) プロトコルを使用し、もう 1 つは DRDA プロトコルを使用します。ネイティブ プロトコルを使用する IBM Informix .NET ドライバは、IBM Informix Client SDK の一部です。DRDA プロトコルを使用するドライバは、IBM DB2 Data Server Driver パッケージの一部です。

現在、IBM Informix Client SDK には、インストール時のオプション コンポーネントとして IBM DB2 Data Server Driver パッケージも含まれています。

于 2013-02-21T00:06:01.443 に答える