2010-03-09 50 views
9

是否可以在运行时更改app.config中的ConnectionString值?根据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 2010-03-09 16:11:29

+0

我正在将内容从旧版本的库迁移到库的新版本 - 两个版本都使用相同的连接字符串名称,但我想从一个数据库中读取数据并写入另一个数据库。 – 2010-03-10 16:07:29

+0

我刚刚意识到我在我的文章中写了web.config,我的意思是app.config(更新以反映更改)。 – 2010-03-10 16:25:51

回答

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(); 

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

+6

+1:只是一个小小的修改:如果您想再次从配置文件重新读取新值而无需重新启动应用程序,请在保存后通过调用以下命令来刷新文件: * System.Configuration。 ConfigurationManager中。RefreshSection(“connectionStrings”); * – 2010-03-09 23:07:09

+4

这工作,虽然我在一个控制台应用程序,所以我不得不使用不同的行: 配置myConfiguration = ConfigurationManager.OpenExeConfiguration(exeFilePath); 请注意,这确实会更改物理配置文件。 – 2010-03-10 16:23:56

0

不知道为什么你会想在运行时不断改变你的web.config(不推荐),但在这里看看更多的信息。

Writing to .NET Web.config

这里最主要的是你的web.config必须具有读取和写入的帐户任何权限的ASPNET进程正在运行的。

+0

不知道为什么这是downvoted。你提出了一项建议,说明这不是好的做法,并且还提供了OP所要求的问题的进一步解读。 – gcoulby 2017-07-16 09:17:33

-1

我猜你所看到的是一个编译器错误,而不是运行时错误。您正在使用的类是应用程序设置中生成的方法,生成的属性只有属性上的getter,并且没有setter。这就是你收到这个错误的原因。

要更改属性,您需要使用Configuration类,并使用AppSettings属性传递该键的字符串。然后你可以调用Configuration.Save方法。

+1

这是一个ConnectionStringSetting,而不是一个AppSetting,它绝对不是编译错误。奇怪的是,文档说我可以*设置*值。 – 2010-03-10 16:09:24

-1

不建议在运行时使用web.config更改连接字符串。
我会建议维护这些连接在一个不同的文件,并实施filewatcher来验证这些参数的值是否已经改变。

0

connectionStrings-Section是只读的。 我只需要在会话期间进行更改,例如使用只读帐户进行数据库查询并在验证后使用授予的帐户更新/修改操作。

所以我的解决方案是appSettings-Section的connectionString,它可以在运行时修改。

在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;

相关问题