DbProviderFactories for .NET Error

时间:2010-01-15 03:30:58

标签: .net web-config odp.net dbproviderfactories

我无法让ODP.NEt库与.NET DBProviderFactories一起使用。我使用此代码收到以下错误:

_DBFactory = DbProviderFactories.GetFactory(providerName);

为system.data创建配置节处理程序时发生错误:列'InvariantName'被限制为唯一。值'Oracle.DataAccess.Client'已存在。

使用此providerName:Oracle.DataAccess.Client

以及web.config中的以下条目:

  <system.data>
    <DbProviderFactories>
      <add name="Oracle Data Provider for .NET" invariant="Oracle.DataAccess.Client" description=".Net Framework Data Provider for Oracle" type="Oracle.DataAccess.Client.OracleClientFactory, Oracle.DataAccess, Version=10.2.0.100, Culture=neutral, PublicKeyToken=89b483f429c47342" />
    </DbProviderFactories>
  </system.data>

有谁知道出了什么问题?我认为我没有在任何地方设置过两次。

4 个答案:

答案 0 :(得分:7)

如果您安装了ODP.net(例如使用oracle通用安装程序,而不是xcopy),您将在machine.config中找到相同的DbProviderFactories / add。

所以在web.config中添加它是第二次添加它 - 所以,重复Oracle.DataAccess.Client!

答案 1 :(得分:6)

你能做到以下几点吗? (注意“清除”)

  <system.data>
    <DbProviderFactories>

      <clear />

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

    </DbProviderFactories>
  </system.data>

答案 2 :(得分:2)

应该注意<clear />将清除您可能不想做的所有DbProviderFactories,具体取决于您的情况。

您也可以在重新添加之前删除该类,方法是添加以下行:

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

以下是整个<system.data>的样子:

  <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.2.0, Culture=neutral, PublicKeyToken=89b483f429c47342" />
    </DbProviderFactories>
  </system.data>

如果您的本地计算机和服务器环境没有匹配的配置文件(例如machine.config),这将非常有用。

您可以做的另一件事就是将它从web.config中删除,假设您的machine.config中的设置可以正常工作。但是,我会在您的开发机器和服务器上测试它。在我的情况下,它工作在一个而不是另一个,因为machine.config文件不匹配。为了解决这个问题,我将相同的设置添加到服务器上的machine.config,而没有像这样的<remove invariant="Oracle.ManagedDataAccess.Client" />

  <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.2.0, Culture=neutral, PublicKeyToken=89b483f429c47342" />
    </DbProviderFactories>
  </system.data>

答案 3 :(得分:1)

很可能是机器配置文件DbProviderFactories部分崩溃了。 检查是否有额外的Oracle.DataAccess.Client行,在卸载oracle客户端之后仍然存在。