我无法让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>
有谁知道出了什么问题?我认为我没有在任何地方设置过两次。
答案 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客户端之后仍然存在。