【问题标题】:Enterprise Library DAAB 6 and ODP.NET - Connection string for the default database 'XXX' does not exist企业库 DAAB 6 和 ODP.NET - 默认数据库“XXX”的连接字符串不存在
【发布时间】:2014-11-16 14:42:16
【问题描述】:

我正在使用企业库 DAAB 6。为了与 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>

我已经使用 NuGet 安装了所有必需的包。 Package.Config 文件如下所示:

<packages>
    <package id="EnterpriseLibrary.Common" version="6.0.1304.0" targetFramework="net45" />
    <package id="EnterpriseLibrary.Data" version="6.0.1304.0" targetFramework="net45" />
    <package id="EntLibContrib.Data.OdpNet" version="6.0.1304.0" targetFramework="net45" />
</packages>

我还添加了对 Oracle.DataAccess.dll 文件的引用。

我使用以下代码行连接到数据库

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

tnsping 适用于 Oracle 数据库。

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

【问题讨论】:

    标签: c# enterprise-library odp.net enterprise-library-6


    【解决方案1】:

    听起来好像没有为 Oracle 设置 DbProviderFactories。通常在安装 ODP.NET 时,机器配置会更新为:

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

    ODP.NET Configuration。我会验证 machine.config 是否已设置。你也可以在你的 app/web.config 中设置 provderfactories。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2010-12-29
      • 1970-01-01
      • 2011-06-20
      • 1970-01-01
      • 1970-01-01
      • 2019-09-19
      • 2016-08-01
      • 1970-01-01
      相关资源
      最近更新 更多