在 app.config 文件中使用多个 SQL Server 连接字符串

15

我希望在一个Windows Forms应用程序中显示一个包含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>

然后拆分键值对。

有没有其他方法可以实现这个功能?

6个回答

38

要从你的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 是连接的提供程序的名称,例如 SQL Server 的 System.Data.SqlClient(其他数据库系统的名称也各不相同)。如果在配置文件中的连接字符串中省略了 providerName= 属性,则默认为 SQL Server (System.Data.SqlClient)。

Marc


获取连接字符串应该在 machine.config 中,而不仅仅是在 app.config 中。 - Kiquenet

18

使用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”元素的子元素以获取所有键值对。 - Benjamin Ortuzar
2
foreach (ConnectionStringSettings connSettings in ConfigurationManager.ConnectionStrings) {} - d91-jal

4

是的,你可以用另一种方式实现这个目标。在 app.config 文件中,可以创建 connectionStrings 部分。

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

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;


0

以下是如何使用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);

0

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

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

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

您可以通过拆分键名(例如,在此示例中使用“_”)来获取名称。

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


1
我肯定会建议在你的 app.config 中使用 <connectionStrings> 部分 - 这才是它真正存在的目的! - marc_s

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接