【问题标题】:Multiple SQL Server connection strings in app.config fileapp.config 文件中的多个 SQL Server 连接字符串
【发布时间】:2010-12-04 13:20:56
【问题描述】:

我有兴趣在 Windows 窗体应用程序中显示 N 个单选按钮列表,供用户选择目标数据库服务器。我想在 app.config 文件中添加 SQL Server 连接字符串,以便应用程序在运行时读取它们并在 Windows 窗体中呈现为单选按钮。

一开始我想用分隔符来分隔连接

  <appSettings>
    <add key="ConnectionString" value="connection1|user id=user;password=123;server=10.0.0.1;database=myDatabase;connection timeout=30|connection2|user id=user;password=123;server=10.0.0.2;database=myDatabase;connection timeout=30"/>
</appSettings>

然后拆分键值对。

是否有可能以不同的方式做到这一点?

【问题讨论】:

    标签: c# sql-server connection-string app-config


    【解决方案1】:

    这是使用 LINQ 获取连接字符串列表的方法:

    List<string> connectionStrings = ConfigurationManager.ConnectionStrings
        .Cast<ConnectionStringSettings>()
        .Select(v => v.ConnectionString)
        .ToList();
    

    或者你可以建立一个字典:

    Dictionary<string/*name*/, string/*connectionString*/> keyValue = ConfigurationManager.ConnectionStrings
        .Cast<ConnectionStringSettings>()
        .ToDictionary(v => v.Name, v => v.ConnectionString);
    

    【讨论】:

      【解决方案2】:

      我们可以在Web.Config或App.Config下声明多个连接字符串

      <connectionStrings>
      <add name="SourceDB" connectionString="..." />
      <add name="DestinationDB" connectionString="..." />
      </connectionStrings>
      

      在 DAL 或 .cs 文件中,您可以访问像 string SounceConnection = ConfigurationManager.ConnectionStrings["SourceDB"].ConnectionString; string DestinationConnection = ConfigurationManager.ConnectionStrings["DestinationDB"].ConnectionString; 这样的连接字符串

      【讨论】:

        【解决方案3】:

        要从您的 app.config 中查找所有已定义的连接字符串,请使用 ConfigurationManager(来自 System.Configuration)。

        它有一个枚举:ConfigurationManager.ConnectionStrings,其中包含您的 &lt;connectionStrings&gt; 中的所有条目。

        你可以用这段代码循环它:

        foreach(ConnectionStringSettings css in ConfigurationManager.ConnectionStrings)
        {
           string name = css.Name;
           string connString = css.ConnectionString;
           string provider = css.ProviderName;
        }
        

        Name 只是您为连接字符串指定的符号名称 - 它可以是任何东西,真的。

        ConnectionString 是连接字符串本身。

        ProviderName 是连接提供者的名称,例如System.Data.SqlClient 用于 SQL Server(以及其他用于其他数据库系统)。如果您在配置中从连接字符串中省略 providerName= 属性,则默认为 SQL Server (System.Data.SqlClient)。

        马克

        【讨论】:

        • 获取machine.config中的连接字符串,不只是app.config
        【解决方案4】:

        您可以使用AppSettings 类,获取所有以ConnectionString 开头的keys 的列表并显示它们。

        您的配置文件将如下所示:

        <appSettings>
          <add key="ConnectionString_Name1" value="..."/>
          <add key="ConnectionString_Name2" value="..."/>
          <add key="ConnectionString_Name3" value="..."/>
        </appSettings>
        

        你可以通过splitting获取键名(在本例中使用“_”)。

        顺便说一句:你应该也使用ConnectionStrings部分,你只对连接字符串感兴趣。

        【讨论】:

        • 我绝对会推荐在您的 app.config 中使用 &lt;connectionStrings&gt; 部分 - 这就是它的真正用途!
        【解决方案5】:

        使用 connectionStrings 部分定义您的连接字符串。

        <connectionStrings>
            <add name="connection1" connectionString="user id=user;password=123;server=10.0.0.1;database=myDatabase;connection timeout=30"/>
            <add name="connection2" connectionString="user id=user;password=123;server=10.0.0.2;database=myDatabase;connection timeout=30"/>
        </connectionStrings>
        

        【讨论】:

        • 如何循环遍历“connectionStrings”元素的子元素以获取所有键值对。
        • foreach (ConnectionStringSettings connSettings in ConfigurationManager.ConnectionStrings) { }
        【解决方案6】:

        是的,可以通过其他方式执行此操作。检查您可以在 app.config 文件中创建的 connectionStrings 部分。

        <configuration>
           <connectionStrings>
               <add name="" connectionString=""/>
                <add name="" connectionString=""/>
            </connectionStrings>
        </configuration>
        

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 2013-02-01
          • 1970-01-01
          • 2011-05-06
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多