8

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

Id=SYSMAN;Password=testman3"; 字符串 ProviderName = "Oracle.DataAccess.Client";

        DbProviderFactory factory = DbProviderFactories.GetFactory(ProviderName);

我能够在控制台和 winforms 应用程序中连接到 oracle。上面的代码在一个单独的类库中。我已经安装了 64 位 ODAC。

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

type="Oracle.DataAccess.Client.OracleClientFactory, Oracle.DataAccess, 版本=2.112.3.0, Culture=neutral, PublicKeyToken=89b483f429c47342" />

CPU = 任何 CPU 框架 = 3.5

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

在此处输入图像描述 System.ArgumentException 未被用户代码处理 Message=Unable to find the requested .Net Framework Data Provider。它可能没有安装。Source=System.Data StackTrace:在 System.Data.Common.DbProviderFactories.GetFactory(字符串 providerInvariantName)

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

如何解决此错误?

4

4 回答 4

8

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

System.Data.Common.DbProviderFactories.GetFactoryClasses()

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

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

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

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

于 2013-12-16T08:57:36.347 回答
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();
}
于 2014-06-06T13:09:03.937 回答
0

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

于 2013-08-20T16:22:43.103 回答
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\Config\machine.config
  • 如果安装了 oracle 32bit,请确保您正在构建 32x 的应用程序。
  • 即使您有 32 位/64 位系统和 32 位/64 位应用程序。您应该在 machine.config 中引用与 DbProviderFactories 上相同的 Oracle.Database DLL 版本

截图供参考

machine.config 中的 Oracle 数据库

快速链接:

于 2018-03-29T17:56:14.870 回答