无法在Oracle中找到请求的.Net Framework数据提供程序

时间:2013-07-03 15:40:19

标签: odp.net

string constr =“数据源=(DESCRIPTION =(ADDRESS =(PROTOCOL = tcp)(HOST = spp01)(PORT = 1521))(CONNECT_DATA =(SID = Global)));用户

编号= SYSMAN;密码= testman3" ;             string ProviderName =“Oracle.DataAccess.Client”;

        DbProviderFactory factory = DbProviderFactories.GetFactory(ProviderName);

我可以在console和winforms应用程序中连接到oracle。上面的代码位于一个单独的类库中。我安装了64位ODAC。

ORACLE.DATAACCESS设置为2.x ver 2.112.3.0。我检查了machine.config条目Framework64 v2.0.50727和v4.0.30319

type =“Oracle.DataAccess.Client.OracleClientFactory,Oracle.DataAccess,Version = 2.112.3.0,Culture = neutral,PublicKeyToken = 89b483f429c47342”/>

CPU =任何CPU框架= 3.5

当我从ASP.net中的类库调用相同的代码时,我得到以下错误

enter image description here System.ArgumentException未被用户代码处理   Message =无法找到请求的.Net Framework数据提供程序。它可能没有安装。   来源= System.Data   堆栈跟踪:        在System.Data.Common.DbProviderFactories.GetFactory(String providerInvariantName)

我甚至将apppool设置为允许32位应用程序。

如何解决此错误?

4 个答案:

答案 0 :(得分:8)

该错误表明您的系统上未安装Oracle客户端。要验证它,您可以运行以下代码行:

<强> System.Data.Common.DbProviderFactories.GetFactoryClasses()

您将获得所有已安装数据提供程序的DataTable。如果DataTable中未列出Oracle.DataAccess.Client invarient,则表示未安装。

我在我们的一台客户机上遇到了同样的问题,在调试时我发现Oracle客户端是从Admin用户安装的,他们试图从其他用户那里访问它。

从当前用户安装Oracle客户端可以解决问题。

请不要忘记在安装Oracle客户端后重新启动应用程序。

答案 1 :(得分:1)

您只需要数据提供者。在部署到Windows Server 2008 R2时以及在服务器上安装数据提供程序之后,我遇到了与Oracle 11g相同的问题。虽然我不得不重新启动网络应用程序几次,但没有在第一次拍摄时工作。

要检查服务器上是否有ODAC,只需将此字符串转储到某个地方或您可以看到的任何地方的日志:

private String GetDbProviders()
{
    // Retrieve the installed providers and factories.
    DataTable table = DbProviderFactories.GetFactoryClasses();

    StringBuilder bob = new StringBuilder();

    // Display each row and column value.
    foreach (DataRow row in table.Rows)
    {
        foreach (DataColumn column in table.Columns)
        {
            bob.AppendLine(" "+row[column]+" ");
        }
    }

    return bob.ToString();
}

答案 2 :(得分:0)

卸载64位ODAC并安装32位ODAC。

答案 3 :(得分:0)

这是所有使用Oracle客户端作为数据库的.NET开发人员都会遇到的常见问题之一。

要记住的要点:

  • 确保已从Oracle安装Oracle ODAC。
  • 检查Oracle.DataAccess是否已正确安装:( Oracle.DataAccess应该在DbProviderFactories部分中)
    • C:\ Windows \ Microsoft.NET \ Framework \ v4.0.30319 \ Config \ machine.config
    • C:\的Windows \ Microsoft.NET \ Framework64 \ v4.0.30319 \配置\ machine.config中
  • 如果安装了oracle 32bit,请确保您在32x中构建应用程序。
  • 即使你有32位/ 64位系统和32位/ 64位应用程序。您应该引用与machine.config
  • 中的DbProviderFactories相同的Oracle.Database DLL版本

参考屏幕截图

OracleDatabase in machine.config

快速链接: