web-dev-qa-db-ja.com

Oracle.DataClientを使用する場合、プロバイダーはOracleクライアントエラーのバージョンと互換性がありません

Visual Studio 2008 Express Editionを使用しており、Oracle.DataClientを使用して小さなアプリケーションを開発しようとしています。ターゲットシステムのデータベースに接続しようとすると、上記のエラーが発生します。

Oracle10gR2用のOracleODP.netプロバイダーへの参照を追加しました。ターゲットマシンには、Oracle10gR2データベースのコピーがインストールされています。それにもかかわらず、エラーが発生します。これを投稿する前に、SOで この投稿 を読み、インスタントクライアントをインストールしましたが、エラーが解決しません。以下は完全なエラースタックです。

************** Exception Text **************
System.TypeInitializationException: The type initializer for 'Oracle.DataAccess.Client.OracleConnection' threw an exception. ---> Oracle.DataAccess.Client.OracleException The provider is not compatible with the version of Oracle client    at Oracle.DataAccess.Client.OracleInit.Initialize()
   at Oracle.DataAccess.Client.OracleConnection..cctor()
   --- End of inner exception stack trace ---
   at Oracle.DataAccess.Client.OracleConnection..ctor(String connectionString)
   at Employees1.frmLogin.oralogin()
   at Employees1.frmLogin.btnTest_Click(Object sender, EventArgs e)
   at System.Windows.Forms.Control.OnClick(EventArgs e)
   at System.Windows.Forms.Button.OnClick(EventArgs e)
   at System.Windows.Forms.Button.OnMouseUp(MouseEventArgs mevent)
   at System.Windows.Forms.Control.WmMouseUp(Message& m, MouseButtons button, Int32 clicks)
   at System.Windows.Forms.Control.WndProc(Message& m)
   at System.Windows.Forms.ButtonBase.WndProc(Message& m)
   at System.Windows.Forms.Button.WndProc(Message& m)
   at System.Windows.Forms.Control.ControlNativeWindow.OnMessage(Message& m)
   at System.Windows.Forms.Control.ControlNativeWindow.WndProc(Message& m)
   at System.Windows.Forms.NativeWindow.Callback(IntPtr hWnd, Int32 msg, IntPtr wparam, IntPtr lparam)


************** Loaded Assemblies **************
mscorlib
    Assembly Version: 2.0.0.0
    Win32 Version: 2.0.50727.42 (RTM.050727-4200)
    CodeBase: file:///C:/WINDOWS/Microsoft.NET/Framework/v2.0.50727/mscorlib.dll
----------------------------------------
API Data Conversion Assistant
    Assembly Version: 0.0.0.1
    Win32 Version: 0.0.0.1
    CodeBase: file:///C:/Documents%20and%20Settings/3i/My%20Documents/My%20Dropbox/Sathya's%20dropbox/VisualStudio%20Releases/APIDataconversion/Application%20Files/API%20Data%20Conversion%20Assistant_0_0_0_3/API%20Data%20Conversion%20Assistant.exe
----------------------------------------
System.Windows.Forms
    Assembly Version: 2.0.0.0
    Win32 Version: 2.0.50727.42 (RTM.050727-4200)
    CodeBase: file:///C:/WINDOWS/Assembly/GAC_MSIL/System.Windows.Forms/2.0.0.0__b77a5c561934e089/System.Windows.Forms.dll
----------------------------------------
System
    Assembly Version: 2.0.0.0
    Win32 Version: 2.0.50727.42 (RTM.050727-4200)
    CodeBase: file:///C:/WINDOWS/Assembly/GAC_MSIL/System/2.0.0.0__b77a5c561934e089/System.dll
----------------------------------------
System.Drawing
    Assembly Version: 2.0.0.0
    Win32 Version: 2.0.50727.42 (RTM.050727-4200)
    CodeBase: file:///C:/WINDOWS/Assembly/GAC_MSIL/System.Drawing/2.0.0.0__b03f5f7f11d50a3a/System.Drawing.dll
----------------------------------------
Oracle.DataAccess
    Assembly Version: 2.102.2.20
    Win32 Version: 2.102.2.20

アプリケーションを開発したマシンにOracle11gをインストールしていて、そこでは正常に動作しますが、ターゲットマシンでこのエラーが発生します。任意の入力をいただければ幸いです。

PS:前述のように、参照されるOracle.DataClient.dllファイルのバージョンは11gではなく10gR2に対応します。

16
Sathyajith Bhat

私はこの問題をさらに調査してきましたが、ODP.Netは混合しないことに煩わしいため、ダウンロードした同じバージョンのODP.Netから適切なDLLをすべて取得し、Exeファイルと同じフォルダーに配置する必要があります。あなたが見ている問題であるバージョン番号(それまたはoci.dllのいずれかが完全に欠落している場合、それは迷惑に同じエラーを出します)。

ここでこれを行う方法を説明しました: http://splinter.com.au/using-the-new-odpnet-to-access-Oracle-from-c ここにその要点があります:

  • ダウンロード http://www.Oracle.com/technology/software/tech/windows/odpnet/index1110710beta.html
  • ファイルを解凍します
  • その中のすべてのJARを解凍します
  • 解凍されたばかりの次のdllを取得します。oci.dll(「oci.dll.dbl」から名前が変更されました)Oracle.DataAccess.dll oraociicus11.dll OraOps11w.dll orannzsbb11.dll oraocci11.dll ociw32.dll(「ociw32.dll」から名前が変更されました) dbl ')
  • すべてのDLLをC#実行可能ファイルと同じフォルダーに配置します
17
Chris

クライアントシステムでODBC Administratorを使用して接続を作成し、正常にテストしましたか?

このエラーが発生する9iおよび10gクライアントの権限の問題に対するパッチがあります。 10.2.0.1を使用している場合、これを解決するには10.2.0.3にアップグレードする必要があります。

1
DCookie

適切なOracleClientバージョンをインストールした後でも、サーバーにインストールされている.NetFramewarkを確認する必要があります。ODP.Netは.NetFramework3.5から4.5.2をサポートしています。

0
Jaswanth

アプリでOleDB(System.Data.Oledb namespace)接続を使用するようにしましたが、正常に動作します。アプリがOracleSPを呼び出すための単なるフロントエンドであり、値が返されないことを考えると、この問題の解決策を見つけるために2日間を費やしたので、このアプローチは許容できるアプローチだと思います。アプリのさらなる開発。将来、そのようなアプリケーションに対してどのような間違いを犯しているのかを知ることができるので、私はまだ答えを受け入れています。

0
Sathyajith Bhat

私は同じ問題に遭遇しました。マシンに11gクライアントがインストールされている場合は、11g ODP.NetDLLを使用する必要があります。すべてを完全にアンインストールしてから、11gクライアントをインストールしてから、11gODP.NETドライバーをインストールする必要がありました。ドライバーはGACにインストールされ、ちょっと面倒になります。

*注:これは9i未満のバージョンに接続する必要がない場合にのみ機能するというのが私のDBAからの理解です*

サーバーでもこれを行う必要がありました。

HTH

0
andrewWinn