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
,其中包含您的 <connectionStrings>
中的所有条目。
你可以用这段代码循环它:
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 中使用<connectionStrings>
部分 - 这就是它的真正用途!【参考方案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 文件中的部分和/或设置