165

ASP.net プロジェクトでOracle ODP.NET 11g (11.1.0.6.20) Instant Clientをデータ プロバイダーとして使用しようとしていますが、aspx ページを実行すると、" The provider is not compatible with the version Oracle クライアントの"エラー メッセージ。どんな助けでも大歓迎です。

Visual Studio 2005 でデータ プロバイダーを参照しましたが、コード ビハインドは次のようになります。

using Oracle.DataAccess.Client;
..

OracleConnection oOracleConn = new OracleConnection();
oOracleConn.ConnectionString =
    "Data Source=MyOracleServerName;" +
    "Integrated Security=SSPI";
oOracleConn.Open();

//Do Something

oOracleConn.Close();

ページのエラーは次のようになります。

Exception Details: Oracle.DataAccess.Client.OracleException: The provider is not compatible with the version of Oracle client

Source Error: 
Line 21: 
Line 22: 
Line 23:             OracleConnection oOracleConn = new OracleConnection();
Line 24:             oOracleConn.ConnectionString =
Line 25:                 "Data Source=MyOracleServerName;" +

[OracleException (0x80004005): The provider is not compatible with the version of Oracle client]
   Oracle.DataAccess.Client.OracleInit.Initialize() +494
   Oracle.DataAccess.Client.OracleConnection..cctor() +483

Stack Trace: 
[TypeInitializationException: The type initializer for 'Oracle.DataAccess.Client.OracleConnection' threw an exception.]
   Oracle.DataAccess.Client.OracleConnection..ctor() +0
   Boeing.IVX.Web.RoyTesting.Page_Load(Object sender, EventArgs e) in C:\Documents and Settings\CE218C\Desktop\IVX.Net\Web\IVX\RoyTesting.aspx.cs:23
   System.Web.Util.CalliHelper.EventArgFunctionCaller(IntPtr fp, Object o, Object t, EventArgs e) +15
   System.Web.Util.CalliEventHandlerDelegateProxy.Callback(Object sender, EventArgs e) +33
   System.Web.UI.Control.OnLoad(EventArgs e) +99
   System.Web.UI.Control.LoadRecursive() +47
   System.Web.UI.Page.ProcessRequestMain(Boolean includeStagesBeforeAsyncPoint, Boolean includeStagesAfterAsyncPoint) +1436
4

27 に答える 27

95

私はこの問題をさらに調査してきましたが、ODP.Netは混合しないことに煩わしいため、ダウンロードした同じバージョンのODP.Netから適切なDLLをすべて取得し、Exeファイルと同じフォルダーに配置する必要があります。バージョン番号。

これを行う方法をここで説明しました:http ://splinter.com.au/using-the-new-odpnet-to-access-oracle-from-c ただし、その要点は次のとおりです。

  • ODP.Netをダウンロード
  • ファイルを解凍します
  • その中のすべての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#実行可能ファイルと同じフォルダーに配置します
于 2009-08-11T03:14:58.060 に答える
35

Oracle Data Provider for .NET 2.0 (11.1.0.6.20)のみをインストールし、 Oracle Instant Client (11.1.0.6.0)はインストールしませんでした。

インストールしたところ、エラーが消えました!

于 2009-03-18T20:42:26.320 に答える
33

これは、32 ビットの Oracle クライアントに対して 64 ビットの .NET ランタイムを実行すると発生する可能性があります。これは、サーバーでアプリを 64 ビットで実行している場合に発生する可能性があります。64 ビット ランタイムで .NET アプリを実行します。VS のプロジェクトに CPU フラグを設定して、32 ビット ランタイムで実行できます。

于 2009-05-29T04:38:41.123 に答える
5

Oracle 11g (11.1.0.7.20) の場合、Exe と共に次の dll を追加して動作させる必要がありました。

  1. oci.dll
  2. OraOps11w.dll
  3. oraociicus11.dll (30MB 近くの非常に巨大なファイル)
  4. Oracle.DataAccess.dll
于 2011-03-03T19:10:08.467 に答える
5

ターゲットマシンにODP.Netをインストールすると、問題が解決するはずです... dllをコピーするのは良い考えではありません...

于 2010-02-04T17:30:21.833 に答える
2

まだこの問題を抱えている人のために:この記事に基づいて

http://oradim.blogspot.com/2009/09/odpnet-provider-is-not-compatible-with.html

サーバーに Microsoft C++ Visual Runtime Library がないことがわかりました。Visual Studio がインストールされているため、開発マシンにそれがありました。ここからライブラリの(現在の)最新バージョンをダウンロードしてインストールしました:

http://www.microsoft.com/en-us/download/details.aspx?id=13523

セットアップを実行すると、C# からのオラクル呼び出しが成功しました。

于 2013-12-19T14:09:15.567 に答える
2

また、IIS Application pool Enable 32-bit true または false フラグも探してください。

于 2011-04-12T15:54:52.187 に答える
2

私は同じ問題を抱えていますが、私の場合、dllをbinフォルダーにコピーすることはできず、アセンブリバージョンのみを「再バインド」します。

<?xml version="1.0" encoding="utf-8" ?>
<configuration>
  <runtime>    
    <assemblyBinding xmlns="urn:schemas-microsoft-com:asm.v1">
      <dependentAssembly>
        <assemblyIdentity name="Oracle.DataAccess" publicKeyToken="89B483F429C47342" culture="neutral"/>
        <bindingRedirect oldVersion="2.112.2.0" newVersion="2.112.1.0"/>
      </dependentAssembly>
    </assemblyBinding>
  </runtime>
</configuration>
于 2013-03-19T00:01:50.573 に答える
2

私はまったく同じ問題を抱えていました。アプリケーションのコンパイル後に oraociei11.dll を削除しました (削除したことを忘れていました)。そして、実行しようとしているときにこのエラーが発生していました。そのため、oraocei11.dll の dll が見つからない場合、このエラーが表示されます。このエラーが発生する場合は他にもあるかもしれませんが、これはその 1 つと思われます。

于 2009-08-05T14:50:38.827 に答える
2

私は、新しい DLL を入手する道をたどりませんでした。完全に正常に動作する既存のプロジェクトがたくさんありましたが、頭痛の種だったのは新しいプロジェクトだけだったので、別のプロジェクトを試すことにしました。

私のプロジェクトは、 Oracle.DataAccess.dll に依存する内部開発された Internal.dll を使用していましたv4.112.3.0。なんらかの理由で、発行時に、v4.121.0.0構成ファイルで明示的に指定されていなくても、Visual Studio は常に をアップロードしました。そのため、エラーが発生していました。

だから私がしたことは:

  1. 正常に実行されているプロジェクトの 1 つから Internal.dll を私の Web サイトにコピーしました/bin(念のため)。
  2. 正常に実行されているプロジェクトの 1 つから Oracle.DataAccess.dll を Web サイトの にコピーしました/bin
  3. 私の Web サイトから両方への参照を追加します。
  4. 最後に Oracle.DataAccess 参照が に表示されましたmyWebSite.csprojが、間違ったバージョンが表示されました:v4.121.0.0ではなくv4.112.3.0.
  5. の参照を手動で変更したmyWebSite.csprojため、次のようになりました。

    <Reference Include="Oracle.DataAccess, Version=4.112.3.0, Culture=neutral, PublicKeyToken=89b483f429c47342, processorArchitecture=x86">
      <SpecificVersion>False</SpecificVersion>
      <HintPath>bin\Oracle.DataAccess.dll</HintPath>
    </Reference> 
    
于 2015-01-15T10:52:36.813 に答える
1

ネットワーク共有上の Oracle.Data.dll アセンブリが DBA によって更新されたため、同じ問題が発生しました。プロジェクトから参照を削除し、再度追加すると問題が解決しました。

于 2011-11-10T09:01:14.743 に答える
0

最近、ソリューションとそれに含まれるすべてのプロジェクトが x32 プラットフォームを対象とした古いプロジェクトに取り組まなければなりませんでした。私は Oracle.DataAccess.dll と他のすべての提案された Oracle ファイルをすべての場所にコピーしようとし続けましたが、毎回壁にぶつかりました。最後に、ヘッドの電球が点灯し (8 時間後 :))、インストールされている ODAC アセンブリとそのプラットフォームを確認するように求められました。すべての 64 ビット (x64) ODAC クライアントは既にインストールされていますが、32 ビット (x32) はインストールされていません。32 ビット ODAC をインストールすると、問題は解消されました。

インストールされている ODAC のバージョンを確認する方法: C:\Windows\assembly フォルダーを調べます。「プロセッサ アーキテクチャ」プロパティは、インストールされている ODAC のプラットフォームを通知します。

電球が点灯するまでの 8 時間は長い時間です。私はいつも仕事でぐずぐずしなければならないのも不思議ではありません:)。

于 2013-05-21T02:31:53.123 に答える
0

Oracle.DataAccess.dll v4.121.2.0 でも同じ問題が発生しました。2-ホーム インストール (32 および 64 ビット バージョン)。32ビット版はworkerd、64ビット版はしませんでした。

私の場合 (2 日間試行した後)、問題は 64 ビット ホーム バージョンのアクセス許可であることがわかりました。そのバージョンの多くのディレクトリは、「認証されたユーザー」ロールに「読み取り」アクセス権がなく、デフォルトで親ディレクトリに設定されているパーミッションが排他的にオーバーライドされていました。これらのサブディレクトリには、「bin」、「network/admin」、「nls」、「oracore」、「RDBMS」などが含まれていました。sysinternals の「プロセス モニター」(Procmon.exe) ユーティリティで「アクセスが拒否されました」という結果を除外して、それらを見つけました。親ディレクトリからそれらの子サブディレクトリにアクセス許可が継承されると、すべてが機能し始めました。

Oracleホーム全体の権限をオーバーライドする方法がなかったので、一度に1つのディレクトリで実行しましたが、セキュリティをあまり気にしない場合は、対応するOracleホームディレクトリ全体でリセットできると思います.

于 2015-08-17T16:52:42.207 に答える