您可以在运行时更改ConnectionString配置值吗?

时间:2010-03-09 16:04:38

标签: .net sql

是否可以在运行时更改app.config中的ConnectionString值?根据{{​​3}},它应该可以作为ConnectionString属性“获取或设置连接字符串。”

我的代码如下所示:

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

我收到的错误是:“Unhandled Exception:System.Configuration.ConfigurationErrorsException:配置是只读的。”

5 个答案:

答案 0 :(得分: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

答案 1 :(得分:0)

不确定为什么要在运行时不断更改web.config(不推荐),但请查看此处了解更多信息。

Writing to .NET Web.config

这里最重要的是你的web.config需要为ASPNET进程运行的帐户拥有读写权限。

答案 2 :(得分: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;

答案 3 :(得分:-1)

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

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

答案 4 :(得分:-1)

不建议在运行时使用web.config更改连接字符串 我建议将这些连接保存在不同的文件中并实现filewatcher以验证这些参数的值是否已更改。