app.config 文件中的多个 SQL Server 连接字符串

Posted

技术标签:

【中文标题】app.config 文件中的多个 SQL Server 连接字符串【英文标题】:Multiple SQL Server connection strings in app.config file 【发布时间】: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>

然后拆分键值对。

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

【问题讨论】:

【参考方案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>

【讨论】:

以上是关于app.config 文件中的多个 SQL Server 连接字符串的主要内容,如果未能解决你的问题,请参考以下文章

git 中的 web.config 和 app.config 机器特定设置

在 C# 中的 app.config 文件中存储 < 和 > 字符时出错

加密将重新分发的 App.config 文件中的部分和/或设置

我们可以在 .NET 控制台应用程序中有多个 App.Config 文件吗?

如何在单个项目中从 C# 中的多个配置文件中读取值?

WCF - 在单个 APP.Config 文件中定义多个服务?