web-dev-qa-db-ja.com

ODP.NETマネージド-要求された.NetFrameworkデータプロバイダーが見つかりません

Visual Studio 2013を使用して、Nugetを使用するプロジェクトにODP.NETManagedの最新バージョンを追加しました。

Install-Package odp.net.managed

http://www.nuget.org/packages/odp.net.managed/121.1.2

ここで、次のコードを実行しようとすると、次のようになります。

Database db = DatabaseFactory.CreateDatabase();

次の例外がスローされます。

An exception of type 'System.ArgumentException' occurred 
in System.Data.dll but was not handled in user code
Additional information: Unable to find the requested .Net
Framework Data Provider.  It may not be installed.

他のユーザーの同様の問題を読んだ後、管理ドライバーセクションをC:\ Windows\Microsoft.Net\Framework64\v4.0.30319\Config\machine.configに追加しました。

<system.data>
        <DbProviderFactories><add name="Microsoft SQL Server Compact Data Provider 4.0" invariant="System.Data.SqlServerCe.4.0" description=".NET Framework Data Provider for Microsoft SQL Server Compact" type="System.Data.SqlServerCe.SqlCeProviderFactory, System.Data.SqlServerCe, Version=4.0.0.0, Culture=neutral, PublicKeyToken=89845dcd8080cc91"/>
        <add name="ODP.NET, Managed Driver" invariant="Oracle.ManagedDataAccess.Client" description="Oracle Data Provider for .NET, Managed Driver" type="Oracle.ManagedDataAccess.Client.OracleClientFactory, Oracle.ManagedDataAccess, Version=4.121.1.0, Culture=neutral, PublicKeyToken=89b483f429c47342" />
    </DbProviderFactories>
    </system.data>

しかし、それは影響を及ぼしませんでした。

Web.configでそのように指定された接続文字列がありますが、接続を開く前に失敗しているため、接続文字列の形式を見ているかどうかさえわかりません。

<connectionStrings>
    <add name="OneCDPBuild" 
    providerName="Oracle.ManagedDataAccess.Client" 
    connectionString="Data Source=database;user id=IDhere;pwd=passwordhere;" />
  </connectionStrings>

Web設定に以下を追加しました。

<system.data>
    <DbProviderFactories>
      <remove invariant="Oracle.ManagedDataAccess.Client" />
      <add name="ODP.NET, Managed Driver"
           invariant="Oracle.ManagedDataAccess.Client"
           description="Oracle Data Provider for .NET, Managed Driver"
           type="Oracle.ManagedDataAccess.Client.OracleClientFactory, Oracle.ManagedDataAccess, Version=4.121.1.0, Culture=neutral, PublicKeyToken=89b483f429c47342" />
    </DbProviderFactories>
  </system.data>
9
TimeBomb006

まず、直接テストを実行し、ファクトリメソッドを回避します。

var conn = new Oracle.ManagedDataAccess.Client.OracleConnection("your connection string");
conn.Open();

ここでの問題は、binディレクトリにOracle.ManagedDataAccess.dllがないか、接続文字列が原因で接続の問題が発生することに関連します(他の方法でOracleインスタンスにすでに接続できる場合)。

ファクトリに関しては、古いエンタープライズライブラリコードを使用しているようです。フレームワークの新しいバージョンでは、次のものを使用すると思います。

var factory = DbProviderFactories.GetFactory("ODP.NET, Managed Driver");
var conn = factory.CreateConnection();

一歩ずつ進めば、より良いフィードバックが得られると思います。

8
b_levitt

EntityFramework5を使用してASP.NETMVC 5アプリケーションを64ビットバージョンのODACクライアントコンポーネントがインストールされている64ビットサーバーに展開すると、このエラーが発生していました。

B_levittのアドバイスに従い、ファクトリを使用せずに接続を手動で開くことができることを確認したため、ODACがインストールされて機能しましたが、ファクトリメソッドはアセンブリを見つけることができませんでした。

公開されていない時間髪を引っ張った後、問題は32ビットバージョンの.NETFrameworkのmachine.configファイルにあることがわかりました。 Oracleプロバイダーのエントリが含まれていなかったため、このファイルに次のエントリを手動で追加しました。

C:\ Windows\Microsoft.NET\Framework\v4.0.30319\Config\machine.config

<configuration>
  <configSections>

次の2つのセクション全体があることを確認してください。

<section name="Oracle.manageddataaccess.client" type="OracleInternal.Common.ODPMSectionHandler, Oracle.ManagedDataAccess, Version=4.121.1.0, Culture=neutral, PublicKeyToken=89b483f429c47342" />
<section name="Oracle.dataaccess.client" type="System.Data.Common.DbProviderConfigurationHandler, System.Data, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" />

正確なエントリは、framework64フォルダーの下のmachine.configファイルから取得できます。

次に、

  <system.data>
    <DbProviderFactories>

次の2つのファクトリ名があることを確認してください。

  <add name="ODP.NET, Managed Driver" invariant="Oracle.ManagedDataAccess.Client" description="Oracle Data Provider for .NET, Managed Driver" type="Oracle.ManagedDataAccess.Client.OracleClientFactory, Oracle.ManagedDataAccess, Version=4.121.1.0, Culture=neutral, PublicKeyToken=89b483f429c47342" />
  <add name="ODP.NET, Unmanaged Driver" invariant="Oracle.DataAccess.Client" description="Oracle Data Provider for .NET, Unmanaged Driver" type="Oracle.DataAccess.Client.OracleClientFactory, Oracle.DataAccess, Version=4.121.1.0, Culture=neutral, PublicKeyToken=89b483f429c47342" />

これらのエントリを追加した後、すべてが私のために働いていました。

14
Yves Rochon

Enable 32-bit ApplicationIISアプリケーションプール構成をに変更して解決しましたFALSE

インストールしたODACはFailed to find or load the registered .Net Framework Data Provider用であるため、例外64-bitが発生していました。 -)、そして私のアプリプールはアプリを32-bitで実行させていました。

4
Mariano Desanze