【问题标题】:ODP.NET error Unable to find the Requested .Net Framework Data ProviderODP.NET 错误找不到请求的 .Net Framework 数据提供程序
【发布时间】:2013-07-05 21:08:13
【问题描述】:

我正在尝试使用 Oracle 11g Express 和 .NET 4.0 框架开发一个 ASP.NET MVC 4.0 应用程序。我可以使用 ODP.NET 提供程序连接到数据库,还可以针对数据库生成我的 EDMX。我不能做的是使用实体框架查询底层数据库。使用 Visual Studio 生成的 connectionString 实例化我的 DbContext 时,出现以下错误:

找不到请求的 .Net Framework 数据提供程序。可能没有安装

但是,它是安装的,因为

  1. 我可以在 GAC 中看到 dll。
  2. 在 machine.config 中提到。
  3. 我的项目引用了它。
  4. 我实际上是用它从数据库中生成我的 EDMX。
  5. 我已验证我在所有地方都引用了正确的版本 (4.112.3.0)

我在 Cassini 上本地运行代码,并且我的硬件是 32 位架构,所以我假设我只能使用 32 位 DLL,所以这不是架构问题。

具体代码如下:

public class MyContext : ObjectContext, IUnitOfWork
{
    public MyContext() 
    : base(ConfigurationManager
          .ConnectionStrings["OracleEntities"]
          .ConnectionString)//Connectionstring is verified
    {}
}

在我离开之前请帮帮我,留个胡子,然后去山里的某个地方住。

解决方案:由于我没有看到任何提及该解决方案的内容,因此我将在此处提及它以供后代使用。下面的 Andrei 询问了我的连接字符串格式,虽然我很怀疑,但我还是去看看。这是我看到的:

metadata=res://*/OracleModel.csdl|res://*/
OracleModel.ssdl|res://*/
OracleModel.msl;
provider=provider=Oracle.DataAccess.Client;
provider connection string="DATA SOURCE=localhost:1521;
PASSWORD=xxx;PERSIST SECURITY INFO=True;USER ID=xxx

现在,请特别注意这一行

provider=provider=Oracle.DataAccess.Client;

应该,事实上,阅读

provider=Oracle.DataAccess.Client;

否则你告诉 EF 使用 [provider.dll],这不是真的。另请注意,似乎 connectionString 元素的 providerName 属性似乎已被覆盖或忽略。

更新 2:如果这仍然没有帮助,请查看 machine.config。您应该看到以下部分:

<add name="Oracle Data Provider for .NET" invariant="Oracle.DataAccess.Client" description="Oracle Data Provider for .NET" type="Oracle.DataAccess.Client.OracleClientFactory, Oracle.DataAccess, Version=4.112.3.0, Culture=neutral, PublicKeyToken=89b483f429c47342" />

  <remove invariant="Oracle.DataAccess.Client" />

</DbProviderFactories>

如果 存在,请将其注释掉并重试,否则,如果不存在,请将其放入并重试。 p>

【问题讨论】:

  • 是的。您的回答为我指明了正确的方向,因此,我会将其标记为答案并投票。
  • 谢谢 :)。祝你好运
  • 哈哈。我又遇到了同样的错误,我在谷歌上搜索答案让我回到了我自己的问题。
  • 总是有一个很好的做法是重新安装 oracle 客户端,以使其做出最佳配置,而不仅仅是编辑一些随机文件,看看它是否有效!
  • ODP.NET 安装程序已损坏。

标签: c# asp.net asp.net-mvc oracle11g odp.net


【解决方案1】:

试试这个连接字符串格式:

Provider=msdaora;Data Source=MyOracleDB;User Id=myUsername;Password=myPassword;

查看 Oracle db http://www.connectionstrings.com/oracle 的连接字符串示例

【讨论】:

  • 解决方案与连接字符串格式有关,但与您预期的方式不同。查看更新。
【解决方案2】:

另一种可能的解决方案。

我的 webapp 在我的测试服务器上运行良好,但是当我开始为我的实时服务器开发时,我得到了同样的错误: 找不到请求的 .Net Framework 数据提供程序。可能没有安装

如果您比较下面的两个连接字符串,您会注意到导致我的问题的连接字符串在提供程序名称中包含“托管”字样。我实际上使用的是 Oracle 提供程序的非托管版本。因此,我在实时服务器上而不是在测试服务器上收到错误。

    **ORIGINAL:**
    connectionString="DATA SOURCE=192.168.10.101:1521/dataconn;PASSWORD=password;PERSIST   SECURITY INFO=True;USER ID=DataConn" providerName="Oracle.ManagedDataAccess.Client"


    **NEW:**
    connectionString="DATA SOURCE=192.168.10.101:1521/dataconn;PASSWORD=password;PERSIST     SECURITY INFO=True;USER ID=DataConn" providerName="Oracle.DataAccess.Client"

【讨论】:

    【解决方案3】:

    这个错误有点误导,因为它也可能是在错误的 CPU 环境下运行引起的。如果使用 32 位 Oracle 驱动程序,请确保您允许 32 位。这可以作为 IIS 下的设置来完成,或者您可以将应用程序设置为作为 IIS Express 应用程序运行。

    【讨论】:

      【解决方案4】:

      对我们来说,这是 32 位与 64 位进程。

      服务器是 64 位的。 安装的 ODP.NET(Oracle 客户端)也是 64 位的。 我们的应用程序使用目标平台“任何 CPU”和“首选 32 位”标志 SET 编译:

      http://grab.by/v5ki

      作为 32 位进程运行。 一旦使用未选中的标志重新编译,一切都开始工作了。

      【讨论】:

      • 对我来说,我使用的是 AnyCPU,但没有检查 32 位。但是,它必须默认为 32 位。一旦我将它设置为 x64,它就可以加载 x64 dll(我只安装了 64 位 Oracle)
      • 在 Visual Studio 中运行单元测试也会出现同样的问题:记得将 Test/Test Settings/Default Processor Architecture 设置为 X64,否则 Oracle 驱动程序似乎没有安装。
      【解决方案5】:

      通过 IIS,64 位 Win7 打开页面时,我遇到了同样的错误。

      我的解决办法是:

      转到 IIS 管理器 --> 应用程序池 --> 高级设置 --> 启用 32 位应用程序。

      【讨论】:

        【解决方案6】:

        这对我有用。我的服务器已经安装了 Oracle 客户端。 (版本 11.2.0)

        • ODAC for Windows Downloads 页面下载 ODP.NET 托管驱动程序
          (我选择了 2015 年 10 月的版本,下载 2.43 MB)

        • 解压 zip 文件,获取 \lib\net40\Oracle.ManagedDataAccess.dll,并将其放入 bin 文件夹中。

        • 在 web.config 中,在this answer 中解释的 system.data\DbProviderFactories 下添加对 ODP.NET 托管驱动程序的引用。

        就是这样。

        要确认,请运行此answer's code 以查看是否安装了 ODP.NET 提供程序。您应该会在列表中看到 ODP.NET, Managed Driver。

        【讨论】:

          【解决方案7】:

          我遇到了类似的问题。通过添加 NuGet 包解决了这个问题。我已经在安装 ODT 的参考资料中提供了 Oracle.ManagedDataAccess.EntityFramework,但它在详细日志中给出了 Entity Framework 5 与 6 的冲突。一旦我添加了 NuGet 包,一切都开始工作了。

          • 要安装,请右键单击 References --> Manage NuGet Packages... --> 在 Browse 选项卡中搜索 Oracle --> 选择 Oracle.ManagedDataAccess.EntityFramework 并安装最新版本。

          【讨论】:

            【解决方案8】:

            我实际上下载了 ODAC 并安装了它。然后我添加了一个引用,找到了上面提到的包 roadrunner71。

            【讨论】:

              【解决方案9】:

              我在 VS2017 中创建了一个 ASP.NET Web 表单来连接我的 Oracle 数据库 并且正在为 gridview 添加一个 SqlDataSource。

              它连接良好,可以在编译时看到数据,但在运行时我遇到了同样的问题或错误消息:

              找不到请求的 .Net Framework 数据提供程序。可能没有安装

              我通过使用此处找到的格式更正连接字符串解决了它

              Omiting tnsnames.ora Alternative

              一旦我使用了那个连接字符串格式,我的 SqlDataSource 看起来像这样:

              <asp:SqlDataSource ID="SqlDataSource1"
                  ConnectionString="<%$ ConnectionStrings:OracleDB %>"
                  runat="server"
                  ProviderName="<%$ ConnectionStrings:OracleDB.ProviderName %>"
                  SelectCommand="SELECT * FROM usertable">
              </asp:SqlDataSource>
              

              应用新的连接字符串改变了智能感知给出的 ProviderName

              来自:ProviderName="Oracle.DataAccess.Client"

              到:ProviderName=""

              如果您想知道,这就是我的连接字符串的样子

              之前

              <add 
                name="OracleDB" 
                connectionString="Data Source=(DESCRIPTION=(ADDRESS_LIST=(ADDRESS=(PROTOCOL=TCP)(HOST=***)(PORT=***)))(CONNECT_DATA=(SERVER=DEDICATED)(SERVICE_NAME=***)));User ID=***;Password=***;"
                providerName="System.Data.OracleClient" />
              

              之后:

              <add
                    name="OracleDB"
                    connectionString="Data Source=(DESCRIPTION=(ADDRESS=(PROTOCOL=TCP)(HOST=***)(PORT=***))(CONNECT_DATA=(SERVICE_NAME=***)));User Id=***;Password=***;"
                    providerName="System.Data.OracleClient" />
              

              【讨论】:

                猜你喜欢
                • 2014-10-12
                • 2012-06-06
                • 1970-01-01
                • 2013-02-18
                • 2012-04-01
                • 1970-01-01
                • 1970-01-01
                • 1970-01-01
                相关资源
                最近更新 更多