ODP.NET управляемый-не удается найти requested.Net поставщик данных Framework

используя Visual Studio 2013, я добавил последнюю версию ODP.NET управляемый проект с помощью Nuget:

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:WindowsMicrosoft.NetFramework64v4.0.30319Configmachine.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>

но это не повлияло.

у меня есть строка подключения, указанная в качестве таковой в веб.config, но я не уверен, что он даже смотрит на формат строки подключения, поскольку он терпит неудачу, прежде чем я открою соединение:

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

я добавил в свою веб-конфигурацию следующее:

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

3 ответов


Я бы начал с прямого теста и избегая заводских методов:

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

любые проблемы здесь будут либо связаны с Oracle.ManagedDataAccess.dll отсутствует в каталоге bin или проблемы с подключением, вызванные строкой подключения (при условии, что вы уже можете подключиться к экземпляру oracle другими средствами).

что касается фабрики, похоже, вы используете устаревший код корпоративной библиотеки. В более поздних версиях framework я считаю вы бы использовали:

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

Я думаю, если вы сделаете это один шаг за раз, вы получите лучшую обратную связь.


Я получал эту ошибку при развертывании ASP.NET приложение MVC 5 с использованием EntityFramework 5 на наш 64-разрядный сервер, на котором установлена 64-разрядная версия клиентских компонентов ODAC.

я последовал совету b_levitt и подтвердил, что соединение может быть открыто вручную без использования заводов, поэтому ODAC был установлен и работает, но заводские методы не смогли найти сборки.

после вытягивать мои волосы для нераскрытого количества со временем я понял, что проблема в машине.файл конфигурации для 32-разрядной версии .NET framework. Он не включал записи для поставщиков oracle, поэтому я вручную добавил следующие записи в этот файл:

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

под

<configuration>
  <configSections>

убедитесь, что у вас есть следующие две записи раздела:

<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" />

вы можете получить точные записи из машина.файл config в папке framework64.

далее, под

  <system.data>
    <DbProviderFactories>

убедитесь, что у вас есть следующие два названия завода:

  <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" />

после добавления этих записей, все работает для меня.


я решил изменить пул приложений IIS конфигурации Enable 32-bit Application to FALSE.

я получал исключение Failed to find or load the registered .Net Framework Data Provider потому что ODAC, который я установил, для 64-bit и меня приложение бассейн делал приложение работать на 32-bit.