Несколько строк подключения 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);