Хотел бы программно изменить строку подключения для базы данных, которая использует поставщика членства asp.net в приложении Windows. Пространство имен system.configuration позволяет изменять настройки пользователя, однако мы хотели бы изменить настройку приложения? Нужно ли писать класс с использованием XML для изменения класса? Нужно ли удалять текущие соединения (можно ли выбрать соединение для очистки) и добавлять новое? Можно ли настроить существующую строку подключения?





Вы можете программно открыть конфигурацию с помощью пространства имен System.configuration:
Configuration myConfig = ConfigurationManager.OpenExeConfiguration(ConfigurationUserLevel.None);
Затем вы можете получить доступ к коллекции строк подключения по адресу:
myConfig.ConnectionStrings.ConnectionStrings
Вы можете изменить коллекцию, как хотите, а когда закончите, вызовите .Save() для объекта конфигурации.
Используйте класс ConnectionStringsSection. В документации даже приведен пример того, как создать новую строку ConnectionString и сохранить ее в файле конфигурации без необходимости реализации всего XML-файла.
См. здесь и найдите пример ниже.
// Get the application configuration file.
System.Configuration.Configuration config =
ConfigurationManager.OpenExeConfiguration(
ConfigurationUserLevel.None);
// Create a connection string element and
// save it to the configuration file.
// Create a connection string element.
ConnectionStringSettings csSettings =
new ConnectionStringSettings("My Connection",
"LocalSqlServer: data source=127.0.0.1;Integrated Security=SSPI;" +
"Initial Catalog=aspnetdb", "System.Data.SqlClient");
// Get the connection strings section.
ConnectionStringsSection csSection =
config.ConnectionStrings;
// Add the new element.
csSection.ConnectionStrings.Add(csSettings);
// Save the configuration file.
config.Save(ConfigurationSaveMode.Modified);
Пришлось сделать именно это. Вот код, который у меня сработал:
var config = ConfigurationManager.OpenExeConfiguration(ConfigurationUserLevel.None);
var connectionStringsSection = (ConnectionStringsSection)config.GetSection("connectionStrings");
connectionStringsSection.ConnectionStrings["Blah"].ConnectionString = "Data Source=blah;Initial Catalog=blah;UID=blah;password=blah";
config.Save();
ConfigurationManager.RefreshSection("connectionStrings");
Это необходимо для добавления строки подключения, а не для изменения существующей