Несколько строк подключения SQL Server в файле app.config

Мне интересно отображать в приложении 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>

Затем разделите пары значений ключа.

Можно ли сделать это по-другому?

Ответ 1

Чтобы найти все определенные строки подключения из вашего 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= из строки подключения в config, по умолчанию используется SQL Server (System.Data.SqlClient).

Марк

Ответ 2

Используйте раздел 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

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

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

Ответ 4

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

Ответ 5

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

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

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

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

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

Ответ 6

Вот как использовать 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);