Прочитайте элемент connectionStrings вашего app.config - PullRequest
5 голосов
/ 24 ноября 2010

Я пытаюсь прочитать строки подключения из моего app.config, но он показывает только одну строку подключения, чего тоже нет в моем app.config.

Вот мой код:

System.Diagnostics.Debugger.Break();

Configuration config = 
ConfigurationManager.OpenExeConfiguration(
                    AppDomain.CurrentDomain.SetupInformation.ConfigurationFile);

foreach (var connectionString in config.ConnectionStrings.ConnectionStrings)
    System.Diagnostics.Debug.Print(connectionString.ToString());

И он распечатывает это:

data source=.\SQLEXPRESS;Integrated Security=SSPI;
   AttachDBFilename=|DataDirectory|aspnetdb.mdf;User Instance=true

Когда я ожидаю, что он распечатает пользовательскую строку подключения к одной из моих баз данных, которые я указал в файле app.config.

Обновление

Привет, ребята, спасибо всем за то, что вы уделили мне время и попытались помочь.Хотя все вы правы в том, что я мог бы просто использовать ConfigurationManager.ConnectionStrings или получить доступ к любому другому подразделу таким образом, я считаю, что когда я это делаю, конфигурация доступна только для чтения.Я не могу внести в него какие-либо изменения, например добавить новую строку подключения или удалить существующую.И мне нужно это сделать.Пожалуйста, дайте мне знать, если есть способ изменить файл конфигурации во время выполнения.

Ответы [ 6 ]

2 голосов
/ 24 ноября 2010

ConfigurationManager.ConnectionStrings["ConnectionStringName"] должен сделать это, если только он не сохранен как appSetting.

В этом случае он будет в ConfigurationManager.AppSettings["SettingName"]

2 голосов
/ 24 ноября 2010

Есть ли причина, по которой вы используете OpenExeConfiguration, чтобы открыть файл конфигурации?Если это app.config, который вы создали как часть своего проекта, все, что вам нужно сделать, это использовать ConfigurationManager.ConnectionStrings.

2 голосов
/ 24 ноября 2010

Он читает с вашего machine.config.После <connectionStrings> в app.config вставить <clear/>.

1 голос
/ 20 ноября 2017

Если вы хотите редактировать ConnectionStrings (или любой раздел в вашем app.config), вам нужно использовать объект, возвращенный методом GetSection () объекта Configuration.

Configuration config = ConfigurationManager.OpenExeConfiguration(ConfigurationUserLevel.None);
ConnectionStringsSection csSettings = config.GetSection("connectionStrings") as ConnectionStringsSection;
if(csSettings != null)
{
    // examples of removing all settings, adding a new one and removing it
    csSettings.ConnectionStrings.Clear();
    csSettings.ConnectionStrings.Add(new ConnectionStringSettings("myCS", "<connectionString>"));
    csSettings.ConnectionStrings.Remove("myCS");
    // save the changes
    config.Save(ConfigurationSaveMode.Modified);
}

По моему опыту, в OpenExeConfiguration (строка) есть ошибка, которая означает, что он всегда открывает ваш app.config. Чтобы открыть файл конфигурации из имени файла, вам нужно использовать OpenMappedExeConfiguration ().

0 голосов
/ 08 сентября 2011

У меня была точно такая же проблема с небольшим консольным приложением, которое я написал (входит в более крупное решение для веб-приложения) - казалось, что мой app.config больше не собирался, и единственная строка подключения, которую я получал назад был LocalSqlServer.

Перезагрузка исправила это.

0 голосов
/ 24 ноября 2010

Можете ли вы прочитать ЛЮБЫЕ настройки конфигурации (кроме строки подключения)?

Попробуйте:

System.Configuration.ConfigurationManager.AppSettings("MyAppVariable");

Кроме того, этот синтаксис выглядит немного сложным.Попробуйте эту более простую версию:

System.Configuration.ConfigurationManager.ConnectionStrings("MyConnectionString").ConnectionString
...