web-dev-qa-db-ja.com

プロバイダーはOracleクライアントのバージョンと互換性がありません

Oracle ODP.NET 11g(11.1.0.6.20)Instant ClientをASP.netプロジェクトでData Providerとして使用しようとしていますが、 aspxページ「Theプロバイダーは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
153
EverTheLearner

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

インストールしたばかりでエラーが消えました!

34
EverTheLearner

私はこの問題をさらに調査してきましたが、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#実行可能ファイルと同じフォルダーに入れます
87
Chris

最初にここですべてのx86/x64トークを「無視」し、代わりにODP.NET Managed Driverを試してください(.Net v4 +を使用している場合):

https://www.nuget.org/packages/Oracle.ManagedDataAccess/

https://www.nuget.org/packages/Oracle.ManagedDataAccess.EntityFramework/

Oracle ODP.net Managed vs Unmanaged Driver

すべての「アンマネージド」なDLLアーキテクチャの問題を避けてください! :D(約Oracle)。

NuGetパッケージ(11gでも動作):

enter image description here

古い/手動の方法:

managedライブラリを使用するように変換する方法に関する情報:

  • 最初に、managedvsunmanagedの優れたコード比較を示します。 http://docs.Oracle.com /cd/E51173_01/win.122/e17732/intro005.htm#ODPNT148
  • ODP.NET、Managed Driver Xcopyバージョンのみをダウンロードしたことを確認してください
  • ダウンロードしたZipファイルから、プロジェクトディレクトリにコピーして貼り付けます:
    • Oracle.ManagedDataAccessDTC.dll
    • Oracle.ManagedDataAccess.dll
  • Oracle.ManagedDataAccess.dllへの参照を追加します
  • 両方のdllでexeがリリースされていることを確認します(VS2010のApplication Folderに追加)
45
Tod Thomson

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

32
Daniel

ある種の要約を作成しましょう。

エラーメッセージ "プロバイダはOracleクライアントのバージョンと互換性がありません"はいくつかの理由で発生する可能性があります。

  • Oracle Clientがインストールされていません。この場合、エラーメッセージは確かに誤解を招きます。

    Oracle Data Provider for .NET(ODP.NET、つまりファイルOracle.DataAccess.dll)はOracle Instant Clientに含まれていません。別途インストールする必要があります( 2ビットOracle Data Access Components(ODAC) または 64ビットOracle Data Access Components(ODAC)ダウンロード )または、Oracle Universal Installer(OUI)のオプションに従って選択する必要があります。

    Oracle Data Provider> = 12.1をインストールする場合、プロバイダーはGACに自動的に登録されません。必要に応じて手動で登録する必要があります。OracleDoc 2272241.1 を参照してください。

  • ODP.NETのバージョンが、インストールされているOracle Clientのバージョンと一致しません。マイナーバージョン番号も確認する必要があります。たとえば、Oracle.DataAccess.dllバージョン4.112.3.0はOracleクライアントと互換性がありません11.2.0.4。 ODP.NETおよびOracle Clientのバージョンを慎重に確認してください。 oraociei*.dllまたはOraOps*w.dllsigcheck を使用して、Oracle Clientのバージョンを取得できます。

    異なる番号付けスキームに注意してください。ファイルバージョン4.112.3.0意味:。NET Frameworkバージョン4、Oracleリリース11.2.0.3.x

    ODP.NETバージョンには「1.x」、「2.x」および「4.x」があります。これらの番号は、Microsoft .NET Frameworkバージョン1.0.3705/1.1.4322、2.0.50727および4.0.30319に関連しています。バージョン「1.x」は、Oracle Client 11.1まで利用可能でした。バージョン「4.x」はOracle Client 11.2で導入されました

  • ODP.NETのアーキテクチャ(32ビットまたは64ビット)は、アプリケーションのアーキテクチャと一致しません。 32ビットアプリケーションは32ビットOracle Client/ODP.NETでのみ動作します。64ビットアプリケーションには64ビットOracle Client/ODP.NETが必要です。 (ODP.NET Managed Driverを使用しない限り)

  • .NET Frameworkのバージョンが一致しません。たとえば、Target .NET Framework 2.0でアプリケーションをコンパイルする場合、ODP.NETバージョン4.xは使用できません。 .NET Frameworkのターゲットバージョンは、ODP.NETのバージョン以上である必要があります。

  • 開発マシンのOracle.DataAccess.dllのバージョン(つまり、コンパイル中にロードされるバージョン)は、ターゲットマシンのバージョンよりも高いです。

  • Oracle.DataAccess.dllGAC からロードされる可能性があることに注意してください。デフォルトでは、ローカルで提供されるファイルよりも優先されます。

ソリューション

  • ODP.NET Managed Driverの使用を検討してください。Oracleページからダウンロードできます: 64ビットOracle Data Access Components(ODAC)Downloads 。そこでは、Oracle.ManagedDataAccess.dllファイルをアプリケーションディレクトリにコピーするだけでよく、他には何も必要ありません。 32ビットと64ビットの両方で機能します。

  • *.csprojで、それぞれ。 *.vbproj ODP.NETへの参照を次のように編集します。

    <Reference Include="Oracle.DataAccess">
      <SpecificVersion>False</SpecificVersion>
      <Private>False</Private>
    </Reference>
    

    Version=...processorArchitecture=...などの属性は必要ありません。 アプリケーションは、選択したアーキテクチャとターゲット.NETフレームワークに応じて、適切なOracle.DataAccess.dllをロードします(適切にインストールされている場合) -> 100%検証されていません

  • ターゲットマシン上のOracleクライアントのバージョンがわからない場合(たとえば、お客様のマシンである可能性があります):上記のダウンロードページに移動し、最小XCopyOracle Data Access Componentsのバージョン。 Zipを解凍し、Oracle.DataAccess.dllファイルのみをローカルマシンにコピーします。 VSプロジェクトで、この(ほとんどの場合古い)DLLへの参照を作成します。このDLLのバージョンは、アプリケーションが動作するODP.NETの最小バージョンです。アプリケーションを実行すると、GACの発行者ポリシーが実際にインストールされたバージョンにリダイレクトされます。

  • 単一のDLLを取得して特定のフォルダーにコピーするのは賢明な方法ではないと思います。 「裸の」マシンで動作する場合がありますが、ターゲットマシンにOracle製品がインストールされている場合、バージョンの不一致のリスクが高くなります。マシンからOracle製品をアンインストールし、新規インストールを行います。 Oracle 11g(クライアント)をアンインストール/完全に削除する方法 を参照して、本当にきれいなマシンを取得してください。

  • 32ビットと64ビットのアプリケーションを同時に使用する必要がある場合は、次の手順に従って1台のマシンに両方のバージョンをインストールしてください。

前提:OracleホームはOraClient11g_home1と呼ばれ、クライアントバージョンは11gR2です。

  • オプションで、インストールされているOracleクライアントを削除します

  • Oracle x86 Clientをダウンロードして、たとえばC:\Oracle\11.2\Client_x86にインストールします

  • Oracle x64 Clientをダウンロードして、たとえばC:\Oracle\11.2\Client_x64などの別のフォルダにインストールします

  • コマンドラインツールを開き、フォルダー%WINDIR%\ System32(通常はC:\Windows\System32)に移動し、フォルダーora112へのシンボリックリンクC:\Oracle\11.2\Client_x64を作成します(以下を参照)

  • フォルダー%WINDIR%\ SysWOW64(通常はC:\Windows\SysWOW64)に変更し、フォルダーora112へのシンボリックリンクC:\Oracle\11.2\Client_x86を作成します(以下を参照)

  • PATH環境変数を変更し、C:\Oracle\11.2\Client_x86C:\Oracle\11.2\Client_x64などのすべてのエントリをそれぞれC:\Windows\System32\ora112サブフォルダーである\binに置き換えます。注:C:\Windows\SysWOW64\ora112をPATH環境に含めることはできません。

  • 必要に応じて、yor Oracle_HOME環境変数をC:\Windows\System32\ora112に設定します

  • レジストリエディターを開きます。レジストリ値HKLM\Software\Oracle\KEY_OraClient11g_home1\Oracle_HOMEC:\Windows\System32\ora112に設定します

  • レジストリ値HKLM\Software\Wow6432Node\Oracle\KEY_OraClient11g_home1\Oracle_HOMEC:\Windows\System32\ora112に設定します(C:\Windows\SysWOW64\ora112ではありません)

  • できました!これで、x86とx64 Oracleクライアントをシームレスに使用できます。つまり、x86アプリケーションはx86ライブラリをロードし、x64アプリケーションはシステムをさらに変更することなくx64ライブラリをロードします。

シンボリックリンクを作成するコマンド:

cd C:\Windows\System32
mklink /d ora112 C:\Oracle\11.2\Client_x64
cd C:\Windows\SysWOW64
mklink /d ora112 C:\Oracle\11.2\Client_x86

いくつかのメモ:

  • 両方のシンボリックリンクは同じ名前を持つ必要があります。 ora112

  • 後でODP.NETを手動でインストールする場合は、インストールする適切なフォルダを選択するよう注意してください。

  • 名前にかかわらず、フォルダーC:\Windows\System32にはx64ライブラリーが含まれていますが、C:\Windows\SysWOW64にはx86(32ビット)ライブラリーが含まれています。混同しないでください。

  • TNS_ADMIN環境変数(レジストリのTNS_ADMINエントリ)を共通の場所、たとえばTNS_ADMIN=C:\Oracle\Common\networkに設定するのが賢明なオプションかもしれません。

19

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

  1. oci.dll
  2. OraOps11w.dll
  3. oraociicus11.dll(30MBに近いかなり大きい)
  4. Oracle.DataAccess.dll
5
SKG

oDP.Netをターゲットマシンにインストールすると、問題が解決するはずです... dllをコピーすることはお勧めできません...

5
HainKurt

これに3時間を費やした後、私の問題は単に:

OraOps11w.dllがありません

「プロバイダはOracleクライアントのバージョンと互換性がありません」というエラーメッセージが表示されるのはなぜですか? Oracleによるコーディング/テストの質が低いことが必要です。 1994年からOracleを使用し、2002年から.Netで何度も使用しています。それは事実上常に苦痛です。

誰もがOracleをアンインストールし、上記のChrisのソリューションに従ってください(トップアンサー)。それは毎回動作するはずです

StackOverflowの別の投稿から、これはOracleをアンインストールする方法です(正常に動作しないため、Oracleアンインストールツールを忘れてください)。

  • Oracle Universal Installer(OUI)を使用して、すべてのOracleコンポーネントをアンインストールします。
  • Regedit.exeを実行し、HKEY_LOCAL_MACHINE/SOFTWARE/Oracleキーを削除します。これには、すべてのOracle製品のレジストリ全体が含まれます。
  • レジストリの次の部分に残されているOracleサービスへの参照を削除します。HKEY_LOCAL_MACHINE/SYSTEM/CurrentControlSet/Services/Ora *どのサービスがOracleに関連するかは明らかです。
  • マシンを再起動します。
  • 「C:\ Oracle」ディレクトリ、またはOracle_BASEのディレクトリを削除します。
  • 「C:\ Program Files\Oracle」ディレクトリを削除します。
  • 「c:\ temp」ディレクトリの内容を空にします。
  • ごみ箱を空にします。

Chrisは私よりもDLLが少ない Server 2003(32ビット)。これは私が持っているものです:

C:\Oracle\instantclient>dir /b  
oci.dll  
ociw32.dll  
Oracle.DataAccess.dll  
orannzsbb11.dll  
oraocci11.dll  
oraociei11.dll  
OraOps11w.dll  
Orasqlplusic11.dll  
sqlplus.exe  
tnsnames.ora  

C:\ Oracle\instantclientは、グローバルパスおよびOracle_HOME環境変数にあります。 .Netコード参照C:\ Oracle\instantclient\Oracle.DataAccess.dll

4
Paul Lockwood

数時間のトラブルシューティングの後、この問題はプロジェクトのbinディレクトリにOracle.DataAccess.dll(v4.0)が含まれているが、ランタイムがGACからOracle.DataAccess.dll(v2.x)を読み込んでいることが原因であることがわかりました。プロジェクト参照のOracle.DataAccessエントリを削除して再度追加すると、問題が解決しました。

ここで言及した他のファイルは、私の状況では必要ないようでした。

更新

「プロバイダはOracleクライアントのバージョンと互換性がありません」エラーの根本的な原因は、(一般的に)管理対象アセンブリがバージョンと一致しないアンマネージライブラリをロードしようとしていることです。 web.config でライブラリパスを指定することで、Oracleドライバに正しいライブラリを使用させることができるようです1

<configuration>
  <Oracle.dataaccess.client>
    <settings>
      <add name="DllPath" value="C:\Oracle\bin"/>
      <!-- ... -->
    </settings>
  </Oracle.dataaccess.client>
</configuration>
4
psaxton

Oracle Istant ClientでODPを使用していても、ODPは実際のOracle Clientを代わりに使用しようとしているように思えます。マシンにも標準のOracleクライアントがインストールされていますか?同じマシン上の複数のクライアントに関して、Oracleが非常にうるさいことを思い出します。

2
Peter Meyer

以下は、この問題を3時間にわたって解決するために行ったことです。

  1. C:\Oracle\product\11.2.0にあるOracleホームの下に、以前にWindows 64ビット用のclient_1ビットをインストールしたODP.NETというフォルダーがありました。

  2. 後でVisual Studio 2012でASP.NET Web APIアプリをデバッグしようとしたときに、次のエラーメッセージが表示され続けました:The provider is the version of the Oracle client

  3. Googleを検索すると、ODP.NET 64ビットを使用していたため、これが起こっていることがわかりました。その後、Windows 32ビット版のODP.NETを取得してインストールしましたが、同じエラーメッセージが表示され続けました。

  4. SOLUTION:フォルダclient_1を削除し、ODP.NET 32ビットを再インストールしました。インストーラーは、64ビットバージョンのビットと32ビットバージョンのビットを混在させていました。図を行く...

  5. これで再び幸せになり、新しいOracleConnectionを開くことができます。最後に! :)

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=1352

セットアップを実行し、C#からのOracle呼び出しが成功しました!

2
dabor

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

2
AjitDh

TLDRバージョン:

  • 代わりに12c 100%管理プロバイダー を使用してください。
  • 古いプロバイダーを使用する必要がある場合は、Oracle.DataAccess.dllが正しいバージョンの管理されていないOracle Client Dllを指すようにする必要があります。マシンに複数のOracleクライアントがインストールされている場合、「DllPath」構成変数(以下を参照)をアプリ構成に含めるだけの単純な方法ですが、指すように新しいOracleクライアントをインストールする必要があります。

完全版:

まず、古い管理されていないプロバイダー(新しい12c 100%管理プロバイダーではない)のコンポーネントを理解していることを確認しましょう。次の2つの部分で構成されています。

  1. 管理対象.netコンポーネント-Oracle.DataAccess.dll
  2. 管理されていない(非.net)クライアント

簡単に言えば、Oracle.DataAccess.dllはほぼ単なるラッパーであり、.net命令を管理対象外クライアントのOracle-NET命令に変換します。

つまり、Oracle.DataAccessをロードすると、必要なアンマネージクライアントdllを見つけようとする順序があります。 Oracleドキュメント から:

Oracle.DataAccess.dllは、次の順序に基づいて、依存するアンマネージDLL(Oracle Clientなど)を検索します。

1.アプリケーションまたは実行可能ファイルのディレクトリ。

2.アプリケーション構成またはweb.configで指定されたDllPath設定。

3. machine.configで指定されたDllPath設定。

4. Windowsレジストリで指定されたDllPath設定。

HKEY_LOCAL_MACHINE\Software\Oracle\ODP.NET\version\DllPath

5. Windows PATH環境変数で指定されたディレクトリ。

したがって、あなたの場合、アプリは上記のこのプロセスに従い、使用しているOracle.DataAccess.dllアセンブリに比べて古すぎる未管理のdllを含むパスを見つけました。

そのマシンにインストールされている唯一のOracle Clientが古すぎるということだけかもしれません。ただし、マシンに複数のクライアントがインストールされており、管理されていないファイルが別の古いインストールで最初に見つかった場合に、これが機能します。後者の場合、実行する簡単なことは、構成でdllPath構成変数を使用し、正しいOracle Home Binフォルダを指すようにすることです。

<configuration>
  <Oracle.dataaccess.client> 
    <add key="DllPath" value="c:\Oracle\product\1.1.0-xcopy-dep\BIN"/>
  </Oracle.dataaccess.client>
</configuration>

クライアントの新しいコピーをインストールする場合、 xcopy version が最小であり、「インスタントクライアント」が含まれ、上記のDllPathがこの新しい場所を指すようにします。ただし、Oracleクライアントのインストールはすべて機能します。

しかし、このアンマネージドクライアントの解決をすべて回避したい場合は、代わりに100%マネージドプロバイダーを使用するようにアプリを更新できるかどうかを確認してください-マネージドファイルに依存しない、1つまたは2つのマネージドアセンブリだけです。

また、binディレクトリとGACの両方にインストールされていると思われるOracle.DataAccess.dllをロードしていない可能性もありますが、それはあまりありそうもないシナリオだと思います。詳細については、 アセンブリ解決プロセス を参照してください。

2
b_levitt

また、IIS Application pool Enable 32ビットのtrueまたはfalseフラグを探してください。このメッセージが表示された場合、Oracleフォーラムがこれを指示しました。

2
Hydtechie

この問題を解決するためのわずか2つのステップ。

  1. アプリケーションプールの設定を進め、「32ビットアプリケーションを有効にする」フラグをTrueに設定します。
  2. BinのすべてのDLLが32ビットバージョンであることを確認してください...

幸運を祈ります。

1
Mazhar Abbas

私は同じ問題を抱えていますが、私の場合は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>
1
calderonsteven

新しいDLLを入手する道をたどりませんでした。完璧に機能する既存のプロジェクトがたくさんありましたが、頭痛の種になったのは私の新しいプロジェクトだけだったので、他のことを試してみることにしました。

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

だから私がやったことは:

  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> 
    
1
Robotron

Visual Studio 2015用のOracle Data Toolsをインストールしてから、Oracleとの1時間の戦いの後、この問題が発生しました。ファイルのコピー、構成の変更などを行うこの混乱の代わりに、Oracleクライアントを再インストールすることにしました。

1
David Spenard

IIS/IWAMユーザーには、Oracleディレクトリに対する権限がありますか? ExcelやAccessなどの別のアプリを使用して、このデータソースに接続できますか?

1
DCookie

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

1
doekman

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

インストールされたODACのバージョンを確認する方法:C:\ Windows\Assemblyフォルダーを探します。「Processor Architecture」プロパティは、インストールされたODACのプラットフォームを通知します。

8時間は電球が点灯するのに長い時間です。私はいつも職場でスローしなければならないのも不思議ではありません:)。

0
DiligentKarma

Chrisのソリューションも同様に機能しました。ただし、次のエラーメッセージが表示されました。

Could not load file or Assembly 'Oracle.DataAccess' or one of its dependencies. An attempt was made to load a program with an incorrect format.

どうやら、Oraclishの外国語では、プログラムがすべてのプラットフォームまたは32ビットマシンをターゲットにしていることを意味します。プロジェクトプロパティのターゲットプラットフォームを64ビットに変更するだけで、最適な結果が得られます。

0

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

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

Oracleホーム全体のパーミッションをオーバーライドすることはしなかったので、一度に1つのディレクトリを作成しましたが、セキュリティについてそれほど心配しないのであれば、対応するOracleホーム・ディレクトリ全体でリセットできると思います。

0
Greg Z.