如何动态更改web.config中的连接字符串

我在web.config中定义连接字符串

   

如何在c#中动态更改连接字符串

配置是只读的,所以你不能以明显的方式做到这一点

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

这会引发System.Configuration.ConfigurationErrorsExceptionexception,该exception表示“Configuration is read only”。

这是一个使用reflection来重置配置元素的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"; 

顺便说一句,为什么你需要改变它的配置? 我觉得你试图以错误的方式解决一些问题。

您可以使用WebConfigurationManager.OpenWebConfigurationWebConfigurationManager.OpenMappedWebConfiguration打开Web.Config文件以进行读写。 如果您具有写入权限,您将能够进行修改,例如更改连接字符串。

这肯定比使用reflection修改私有字段更好。

然后,修改web.config将回收Web应用程序,因此这不适合让用户更改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(); } 

如果用户能够更改设置的值,则web.config文件是存储设置的错误位置。

您应该在设置文件中签出用户范围值。

MSDN – 在C中使用设置

使用这样的设置时,在运行时更改值很容易:

 Properties.Settings.Default.ConnectionStringName = "New Connection String"; Properties.Settings.Default.Save(); 

使用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(); } 

在Web Confige中输入此代码

  

在您的连接中放置此代码

  string ScrtCon = ConfigurationManager.ConnectionStrings["yourconnectionname"].ToString(); ScrtCon = string.Format(ScrtCon, "Server Name","Data base Name", "Database User Name", "Database password");