Несколько строк подключения к SQL Server в файле app.config - PullRequest
11 голосов
/ 07 октября 2009

Мне интересно отобразить в приложении Windows Forms список из N переключателей, чтобы пользователь мог выбрать целевой сервер базы данных. Я хотел бы добавить строки подключения SQL Server в файл app.config, чтобы они читались приложением во время выполнения и отображались в форме окна в виде переключателей.

Сначала я подумал об использовании разделителя для разделения соединений

  <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 ]

31 голосов
/ 07 октября 2009

Чтобы найти все определенные строки подключения из вашего 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).

Марк

13 голосов
/ 07 октября 2009

Используйте раздел 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>
3 голосов
/ 07 октября 2009

Да, это можно сделать по-другому. Проверьте раздел connectionStrings, который вы можете сделать в файле app.config.

<configuration>
   <connectionStrings>
       <add name="" connectionString=""/>
        <add name="" connectionString=""/>
    </connectionStrings>
</configuration>
1 голос
/ 18 января 2015

Мы можем объявить несколько строк подключения в 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 голосов
/ 15 ноября 2017

Вот как использовать 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 голосов
/ 07 октября 2009

Вы можете использовать класс AppSettings , получить список всех ключей , которые начинаются с ConnectionString, и отобразить их.

Ваш конфигурационный файл будет выглядеть так:

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

Вы можете получить имя, разделив имя ключа (в этом примере используйте "_").

Кстати: вы должны также использовать раздел ConnectionStrings , вас интересуют только строки подключения.

...