2010-08-09 2 views
3

У меня есть следующие в моем web.configДинамическое изменение ConnectionString в web.config

<connectionStrings> 
    <add name="ActiveDirectoryConnection" connectionString="LDAP://ActiveDirectoryDomain1.com" providerName="System.Web.Security.ActiveDirectoryMembershipProvider"/> 
</connectionStrings> 

Мне нужно, чтобы добавить выпадающее меню на мою страницу входа в систему, что позволяет пользователю изменить ConnectionString на другую строку, например «LDAP: //ActiveDirectoryDomain2.com»

В коде C# за тем, как изменить значение connectionString?


Подробнее:

Проблема, которую я имею, что есть 4 другие параметры web.config называют это один ConnectionString. Например:

<activeDirectorySecurityContextSettings connectionStringName="ActiveDirectoryConnection" defaultADUserName="ReportUser" defaultADPassword="password"/> 

Спасибо!

ответ

7

Если пользователь может изменить значение параметра, то файл web.config является неправильным местом для хранения настройки.

Вместо этого вы должны проверить значение пользовательского охвата в файле настроек.

MSDN - Using Settings in C#

При использовании параметров, как это, изменив значение во время выполнения проста:

Properties.Settings.Default.LdapConnectionString = "New Connection String"; 
Properties.Settings.Default.Save(); 
+0

Или поочередно, если вы хотите, чтобы это было приложение шириной (я имею в виду, как администратор приложения может захотеть внести изменения для базы данных приложений для всех пользователей, а не для изменения в каждом соединении), тогда вы можете использовать одноэлементный класс для всех своих строк подключения и изменить их в классе singleton из вашего интерфейса приложения ... Эти данные могут быть сохранены в других местах и ​​могут сохраняться между сеансами приложений. – jcolebrand

+0

@drachenstern - На самом деле все равно было бы разумнее использовать настройки. Вы просто сделаете это областью приложения, а не пользователем. Гораздо проще, чем пытаться реализовать еще один Синглтон, который не нужен миру. –

+0

Проблема, с которой я столкнулась, заключается в том, что есть еще 4 других параметра web.config, которые называют это connectionString. Например: Так что кажется, что я не могу поместить его в файл настроек. – user390480

2
var settings = ConfigurationManager.ConnectionStrings[ 0 ]; 

var fi = typeof(ConfigurationElement).GetField("_bReadOnly", BindingFlags.Instance | BindingFlags.NonPublic); 

fi.SetValue(settings, false); 

settings.ConnectionString = "Data Source=Something"; 
3
  • Это плохая идея, чтобы изменить файл * .config внутри программы ,
  • Плохая идея для веб-страницы изменить любой файл в корневой папке вашего сайта.
  • Плохая идея иметь набор разрешений, позволяющий веб-странице изменять файлы в корневой папке вашего сайта.

В принципе, вам нужно забыть о web.config и структурировать свой код, чтобы использовать строку соединения, существующую только в памяти.

0

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

System.Configuration.ConfigurationManager.AppSettings.Set("keyToBeReplaced", "newKeyValue"); 
+0

Это не делает то, о чем попросил ОП. –

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