了解 App.config 和使用配置管理器:GetSection 与 ConnectionString

Understanding App.config and using Configuration Manager: GetSection vs. ConnectionString

在某些情况下,我想打开一个数据库连接并执行一些查询。

这是我的 App.config:

    <dbservers>
        <connectionStrings>
            <add name="Cube_ConnectionString" connectionString="OLEDB; Datasource=http://cube.com; Initial Catalog=BP" />
        </connectionStrings>
        <queries>
            <add connectionStringName="CubeConnectionString" usedBy="DataAccessor" connectionString="" />
        </queries>
    </dbservers>

这就是我打算检索 connectionString 的方式:

    System.Configuration.ConfigurationManager.ConnectionStrings["Cube_ConnectionString"].ConnectionString;

我想知道使用 GetSection 还是 ConnectionString 最好。他们俩会得到什么回报?这两种方法如何在这样的嵌套 XML 中发挥作用?

此外,将查询放在 app.config 中的目的是什么?

提前致谢

我认为 ConnectionStrings 不会奏效,除非您将它们放在标准部分。如果您想要自定义 <dbservers> 部分,则必须改用 GetSection

这个功能有点笨拙,但非常有用。 How to: Create Custom Configuration Sections Using ConfigurationSection 是一个有用的指南。

本质上,这归结为创建一个继承自 ConfigurationSection 的 class,并添加适当的属性(来自上述指南):

public class PageAppearanceSection : ConfigurationSection
{
    // Create a "remoteOnly" attribute.
    [ConfigurationProperty("remoteOnly", DefaultValue = "false", IsRequired = false)]
    public Boolean RemoteOnly
    {
        get
        { 
            return (Boolean)this["remoteOnly"]; 
        }
        set
        { 
            this["remoteOnly"] = value; 
        }
    }

    // Create a "font" element.
    [ConfigurationProperty("font")]
    public FontElement Font
    {
        get
        { 
            return (FontElement)this["font"]; }
        set
        { this["font"] = value; }
    }

    // Create a "color element."
    [ConfigurationProperty("color")]
    public ColorElement Color
    {
        get
        {
            return (ColorElement)this["color"];
        }
        set
        { this["color"] = value; }
    }
}

...然后在 app/web.config:

中添加对您的部分的引用
<configuration>
  <configSections>
    <section name="dbservers" type="Namespace.DbServersSection, YourAssembly"/>
  </configSections>
</configuration>