как динамически перейти на строку подключения в web.config - PullRequest
5 голосов
/ 08 октября 2011

Я определяю строку подключения в web.config

     <ConnectionStrings>
 <add name="student" connectionString="Server=student;Max Pool Size=300;Initial Catalog=studentDB;User ID=student;Password=st123dent;" providerName="System.Data.SqlClient"/>
     </Connectionstrings>

как я могу динамически изменить строку подключения в c #

Ответы [ 5 ]

9 голосов
/ 08 октября 2011

Конфигурация доступна только для чтения, поэтому вы не можете сделать это очевидным образом, как

ConfigurationManager.ConnectionStrings["student"].ConnectionString = "new value";

Это вызывает System.Configuration.ConfigurationErrorsException исключение, которое говорит, что "Конфигурация доступна только для чтения".

Вот трюк, использующий отражение для сброса атрибута readOnly элемента конфигурации. См. Эту статью для получения полной информации Программная установка свойства connectionString

Фрагмент кода:

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 голосов
/ 08 октября 2011

Вы можете открыть свой файл Web.Config для чтения и записи, используя WebConfigurationManager.OpenWebConfiguration или WebConfigurationManager.OpenMappedWebConfiguration. И если у вас есть разрешение на запись, вы сможете вносить изменения, такие как изменение строки подключения.

Это, безусловно, должно быть лучше, чем использование отражения для изменения частного поля.

После изменения web.config веб-приложение будет перезапущено, поэтому оно не позволяет пользователям вносить изменения в web.config, хотя его можно использовать в определенных сценариях, например при развертывании.

Пример:

var configurationFileInfo = new FileInfo(AppDomain.CurrentDomain.SetupInformation.ConfigurationFile);
var vdm = new VirtualDirectoryMapping(configurationFileInfo.DirectoryName, true, configurationFileInfo.Name);
var wcfm = new WebConfigurationFileMap();
wcfm.VirtualDirectories.Add("/", vdm);
Configuration config = WebConfigurationManager.OpenMappedWebConfiguration(wcfm, "/");

ConnectionStringsSection section = config.GetSection("connectionStrings") 
                         as ConnectionStringsSection;
if (section != null)
{
    ... modify the section ...
    config.Save();
}
0 голосов
/ 29 июля 2016

в Web Confige введите этот код

<add name="yourconnectionname" connectionString="Data Source={0};Initial Catalog={1};User ID={2};Password={3}" providerName="System.Data.SqlClient"/>

, в вашем соединении введите этот код

 string ScrtCon = ConfigurationManager.ConnectionStrings["yourconnectionname"].ToString();
ScrtCon = string.Format(ScrtCon, "Server Name","Data base Name",  "Database User Name", "Database password");
0 голосов
/ 29 апреля 2015

Использовать NameSpace

using System.Configuration;
using System.Web.Configuration;


void ConfigurnewConnectionString(string server, string database, string userid, string password)
    {


    string str = "server=" + server + ";database=" + database + "; User ID=" + userid + "; Password=" + password + "";
    //Configuration myConfiguration = System.Web.Configuration.WebConfigurationManager.OpenWebConfiguration("~");
    //str = System.Web.Configuration.WebConfigurationManager.AppSettings["myKey"];
    //myConfiguration.Save();
    System.Configuration.Configuration Config1 = WebConfigurationManager.OpenWebConfiguration("~");
    ConnectionStringsSection conSetting = (ConnectionStringsSection)Config1.GetSection("connectionStrings");
    ConnectionStringSettings StringSettings = new ConnectionStringSettings("conn", "Data Source=" + server + ";Database=" + database + ";User ID=" + userid + ";Password=" + password + ";");
    conSetting.ConnectionStrings.Remove(StringSettings);
    conSetting.ConnectionStrings.Add(StringSettings);
    Config1.Save(ConfigurationSaveMode.Modified);
    //Configuration myConfiguration = System.Web.Configuration.WebConfigurationManager.OpenWebConfiguration("~");
    //myConfiguration.AppSettings.Settings.Item("myKey").Value = txtmyKey.Text;
    //myConfiguration.Save();
}
0 голосов
/ 08 октября 2011

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

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

MSDN - Использование настроек в C

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

Properties.Settings.Default.ConnectionStringName = "New Connection String";
Properties.Settings.Default.Save();
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...