2010-03-09 9 views
9

Можно ли изменить значение ConnectionString в app.config во время выполнения? Согласно the MSDN documentation, это должно быть возможно как свойство ConnectionString «Получает или задает строку соединения».Можете ли вы изменить значение конфигурации ConnectionString во время выполнения?

Мой код выглядит следующим образом:

ConnectionStringSettings mainConnection = ConfigurationManager.ConnectionStrings["mainConnection"]; 
mainConnection.ConnectionString = "Data Source=SERVER;Initial Catalog=" + NewDatabaseName + ";Integrated Security=True"; 

Ошибка, я получаю это: «Необработанное исключение: System.Configuration.ConfigurationErrorsException:. Конфигурация только для чтения»

+0

Могли бы вы объяснить, почему вы хотите, чтобы переключить строку данных/подключения во время выполнения?. – ram

+0

Я переношу содержимое из старой версии библиотеки в новую версию библиотеки - обе версии используют одно и то же имя строки подключения, но я хочу читать из одной базы данных и записывать в другую базу данных. –

+0

Я только что понял, что написал web.config в своем сообщении, я имел в виду app.config (обновленный, чтобы отразить изменение). –

ответ

17
Configuration myConfiguration = System.Web.Configuration.WebConfigurationManager.OpenWebConfiguration("~"); 
    myConfiguration.ConnectionStrings.ConnectionStrings("myDatabaseName").ConnectionString = txtConnectionString.Text; 
    myConfiguration.AppSettings.Settings.Item("myKey").Value = txtmyKey.Text; 
    myConfiguration.Save(); 

Ref: http://www.beansoftware.com/ASP.NET-Tutorials/Modify-Web.Config-Run-Time.aspx

+6

+1: небольшая модификация: если вы хотите снова прочитать новое значение из файла конфигурации без необходимости перезапуска приложения, обновите файл после сохранения его, вызвав следующее: * System.Configuration. Диспетчер конфигурации.RefreshSection ("connectionStrings"); * –

+4

Это сработало, хотя я был в консольном приложении, поэтому мне пришлось использовать другую строку: Конфигурация myConfiguration = ConfigurationManager.OpenExeConfiguration (exeFilePath); Обратите внимание, что это изменяет файл физической конфигурации. –

0

Не уверен, почему вы хотите постоянно менять свой web.config во время выполнения (не рекомендуется), но посмотрите здесь дополнительную информацию.

Writing to .NET Web.config

Главное здесь в том, что ваш web.config нужно прочитать и написать permissons для учетной записи, процесс ASPNET работает как.

+0

Не знаете, почему это было приостановлено. Вы представили рекомендацию, в которой говорится, что это не является хорошей практикой, а также предоставило дополнительное разъяснение по проблеме, которую запросил ОП. – gcoulby

-1

Я предполагаю, что вы видите, это ошибка компилятора, а не ошибка времени выполнения. Класс, который вы используете, - это сгенерированный метод из ваших настроек приложения, а сгенерированные свойства имеют только свойство getter и не имеют никакого сеттера. Вот почему вы получаете эту ошибку.

Чтобы изменить свойство, вам нужно использовать класс конфигурации и использовать свойство AppSettings, передавая в строке ключ. Затем вы можете вызвать метод Configuration.Save.

+1

Это ConnectionStringSetting, а не AppSetting, и это определенно не ошибка компиляции. Что странно, так это то, что в документации говорится, что я могу * установить * значение. –

-1

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

0

ConnectionStrings-Section - только для чтения. Мне нужно изменить только во время сеанса, например. запрос базы данных с учетной записью только для чтения и после проверки/изменения операций проверки с предоставленной учетной записью.

Таким образом, мое решение является connectionString в разделе appSettings-Section, которое может быть изменено во время выполнения.

В Web.config: <appSettings> <add key="dbconnectionstr" value="Database=...;Host=...;Password=...;Username=..."/> </appSettings>

В SqlDataSource: <asp:SqlDataSource ID="datasource1" runat="server" ConnectionString="<%$ AppSettings:dbconnectionstr %>" .... </asp:SqlDataSource>

И Код: WebConfigurationManager.AppSettings["dbconnectionstr"] = newonnectionString;

Смежные вопросы