ODP.. NET托管-无法找到请求的.NET框架数据提供程序

本文关键字:NET 框架 数据 程序 请求 托管 ODP | 更新日期: 2023-09-27 18:18:53

使用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:'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中指定了连接字符串。配置,但我不确定它是否甚至在看连接字符串格式,因为在我打开连接之前它是失败的:

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

ODP.. NET托管-无法找到请求的.NET框架数据提供程序

我在部署ASP时得到这个错误。使用EntityFramework 5的。NET MVC 5应用程序到我们的64位服务器,在该服务器上安装了64位版本的ODAC客户端组件。

我遵循了b_levitt的建议,并确认可以在不使用工厂的情况下手动打开连接,因此ODAC已安装并工作,但工厂方法无法定位组件。

在揪了我的头发一段时间后,我发现问题出在机器上。. net框架32位版本的配置文件。它不包括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" />

您可以从您的机器中获得准确的条目。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" />

添加这些条目后,一切都为我工作。

我将从直接测试开始,避免使用工厂方法:

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();

我认为如果你一步一步来,你会得到更好的反馈。

我解决了我的问题,将Enable 32-bit ApplicationIIS应用程序池配置更改为 FALSE

我得到异常 Failed to find or load the registered .Net Framework Data Provider ,因为我安装的ODAC是为 64-bit ,我的应用程序池使应用程序运行在 32-bit