C# 企业库DAAB 6和ODP.NET—默认数据库的连接字符串';XXX和x27;不存在

C# 企业库DAAB 6和ODP.NET—默认数据库的连接字符串';XXX和x27;不存在,c#,enterprise-library,odp.net,enterprise-library-6,C#,Enterprise Library,Odp.net,Enterprise Library 6,我正在使用企业库DAAB6。为了与Oracle数据库通信,我使用EntLib Contrib库 我的应用程序的配置文件如下所示 <configuration> <configSections> <section name="dataConfiguration" type="Microsoft.Practices.EnterpriseLibrary.Data.Configuration.DatabaseSettings, Microsoft.P

我正在使用企业库DAAB6。为了与Oracle数据库通信,我使用EntLib Contrib库

我的应用程序的配置文件如下所示

<configuration>
    <configSections>
        <section name="dataConfiguration" type="Microsoft.Practices.EnterpriseLibrary.Data.Configuration.DatabaseSettings, Microsoft.Practices.EnterpriseLibrary.Data, Version=6.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35" requirePermission="true" />
    </configSections>
    <dataConfiguration defaultDatabase="OracleConnectionString">
        <providerMappings>
            <add databaseType="EntLibContrib.Data.OdpNet.OracleDatabase, EntLibContrib.Data.OdpNet, Version=6.0.0.0, Culture=neutral, PublicKeyToken=null"
                name="Oracle.DataAccess.Client" />
        </providerMappings>
    </dataConfiguration>
    <connectionStrings>
        <add name="OracleConnectionString" connectionString="Data Source=localhost:1521/dev;User ID=db_owner;Password=admin;"
            providerName="Oracle.DataAccess.Client" />
    </connectionStrings>
<configuration>
上面这一行生成了一条非常奇怪的错误消息。完整堆栈跟踪如下所示:

System.InvalidOperationException: The connection string for the default database 'OracleConnectionString' does not exist or does not have a valid provider. 
---> System.Configuration.ConfigurationErrorsException: The requested database OracleConnectionString does not have a valid ADO.NET provider name set in the connection string. (C:\Test\OraConsole\bin\Debug\OraConsole.vshost.exe.Config line 13)
   at Microsoft.Practices.EnterpriseLibrary.Data.Configuration.DatabaseSyntheticConfigSettings.GetDatabase(String name)
   at Microsoft.Practices.EnterpriseLibrary.Data.DatabaseProviderFactory.DatabaseConfigurationBuilder.<CreateDefault>b__2(String n)
   --- End of inner exception stack trace ---
   at Microsoft.Practices.EnterpriseLibrary.Data.DatabaseProviderFactory.DatabaseConfigurationBuilder.<CreateDefault>b__2(String n)
   at System.Collections.Concurrent.ConcurrentDictionary`2.GetOrAdd(TKey key, Func`2 valueFactory)
   at Microsoft.Practices.EnterpriseLibrary.Data.DatabaseProviderFactory.DatabaseConfigurationBuilder.CreateDefault()
   at Microsoft.Practices.EnterpriseLibrary.Data.DatabaseProviderFactory.CreateDefault()
   at Data.OdpNet.QuickStarts.Console.Program.Main(String[] args) in c:\Test\OraConsole\Program.cs:line 15
System.invalidoOperationException:默认数据库“OracleConnectionString”的连接字符串不存在或没有有效的提供程序。
--->System.Configuration.ConfigurationErrorsException:请求的数据库OracleConnectionString在连接字符串中未设置有效的ADO.NET提供程序名称。(C:\Test\OraConsole\bin\Debug\OraConsole.vshost.exe.Config第13行)
位于Microsoft.Practices.EnterpriseLibrary.Data.Configuration.DatabaseSyntheticConfigSettings.GetDatabase(字符串名称)
位于Microsoft.Practices.EnterpriseLibrary.Data.DatabaseProviderFactory.DatabaseConfigurationBuilder.b__2(字符串n)
---内部异常堆栈跟踪的结束---
位于Microsoft.Practices.EnterpriseLibrary.Data.DatabaseProviderFactory.DatabaseConfigurationBuilder.b__2(字符串n)
位于System.Collections.Concurrent.ConcurrentDictionary`2.GetOrAdd(TKey,Func`2 valueFactory)
在Microsoft.Practices.EnterpriseLibrary.Data.DatabaseProviderFactory.DatabaseConfigurationBuilder.CreateDefault()中
在Microsoft.Practices.EnterpriseLibrary.Data.DatabaseProviderFactory.CreateDefault()上
在c:\Test\OraConsole\Program.cs中的Data.OdpNet.QuickStarts.Console.Program.Main(字符串[]args)处:第15行
tnsping在Oracle数据库中运行良好


我已经在谷歌上搜索了这个特定的错误消息,但我无法找到这个问题的解决方案。我还尝试了Contrib source提供的快速启动代码示例。它也会生成相同的错误消息。

听起来好像没有为Oracle设置DbProviderFactorys。通常,在安装ODP.NET时,机器配置将更新为以下内容:


.  我将验证machine.config是否已设置。您还可以在app/web.config中设置ProvderFactorys

var database = new DatabaseProviderFactory().CreateDefault();
System.InvalidOperationException: The connection string for the default database 'OracleConnectionString' does not exist or does not have a valid provider. 
---> System.Configuration.ConfigurationErrorsException: The requested database OracleConnectionString does not have a valid ADO.NET provider name set in the connection string. (C:\Test\OraConsole\bin\Debug\OraConsole.vshost.exe.Config line 13)
   at Microsoft.Practices.EnterpriseLibrary.Data.Configuration.DatabaseSyntheticConfigSettings.GetDatabase(String name)
   at Microsoft.Practices.EnterpriseLibrary.Data.DatabaseProviderFactory.DatabaseConfigurationBuilder.<CreateDefault>b__2(String n)
   --- End of inner exception stack trace ---
   at Microsoft.Practices.EnterpriseLibrary.Data.DatabaseProviderFactory.DatabaseConfigurationBuilder.<CreateDefault>b__2(String n)
   at System.Collections.Concurrent.ConcurrentDictionary`2.GetOrAdd(TKey key, Func`2 valueFactory)
   at Microsoft.Practices.EnterpriseLibrary.Data.DatabaseProviderFactory.DatabaseConfigurationBuilder.CreateDefault()
   at Microsoft.Practices.EnterpriseLibrary.Data.DatabaseProviderFactory.CreateDefault()
   at Data.OdpNet.QuickStarts.Console.Program.Main(String[] args) in c:\Test\OraConsole\Program.cs:line 15