.net 能否在运行时更改ConnectionString配置值?

.net 能否在运行时更改ConnectionString配置值?,.net,sql,.net,Sql,是否可以在运行时更改app.config中的ConnectionString值?根据,这应该是可能的,因为ConnectionString属性“获取或设置连接字符串” 我的代码如下所示: ConnectionStringSettings mainConnection = ConfigurationManager.ConnectionStrings["mainConnection"]; mainConnection.ConnectionString = "Data Source=SERVER;In

是否可以在运行时更改app.config中的ConnectionString值?根据,这应该是可能的,因为ConnectionString属性“获取或设置连接字符串”

我的代码如下所示:

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

我收到的错误是:“未处理的异常:System.Configuration.ConfigurationErrorsException:配置是只读的。”

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

这里主要的一点是,您的web.config需要对运行ASPNET进程的帐户具有读写权限

Configuration myConfiguration = System.Web.Configuration.WebConfigurationManager.OpenWebConfiguration("~"); 
    myConfiguration.ConnectionStrings.ConnectionStrings("myDatabaseName").ConnectionString = txtConnectionString.Text; 
    myConfiguration.AppSettings.Settings.Item("myKey").Value = txtmyKey.Text; 
    myConfiguration.Save(); 

Ref:

我猜您看到的是编译器错误,而不是运行时错误。您使用的类是根据应用程序设置生成的方法,生成的属性只有属性上的getter,没有setter。这就是为什么你会收到那个错误


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

不建议在运行时使用web.config更改连接字符串。

我建议在不同的文件中维护这些连接,并实现filewatcher以验证这些参数的值是否已更改。

ConnectionString部分是只读的。 我只需要在会话期间进行更改,例如使用只读帐户进行数据库查询,以及在验证后使用已授予的帐户更新/修改操作。

因此,我的解决方案是appSettings部分的connectionString,可以在运行时对其进行修改。

在Web.config中:



在SQLDataSource:


您能解释一下为什么要在运行时切换数据库/连接字符串吗?我正在将内容从旧版本的库迁移到新版本的库-两个版本使用相同的连接字符串名称,但我想从一个数据库读取,然后写入另一个数据库。我刚刚意识到我在帖子中编写了web.config,我的意思是app.config(更新以反映更改)。+1:只是一个小的修改:如果您想重新读取配置文件中的新值,而不需要重新启动应用程序,请在保存文件后通过调用以下命令刷新该文件:System.Configuration.ConfigurationManager.RefreshSection(“ConnectionString”);虽然我在控制台应用程序中,所以不得不使用另一行:Configuration myConfiguration=ConfigurationManager.OpenExeConfiguration(exeFilePath);请注意,这确实会更改物理配置文件。这是一个ConnectionStringSetting,而不是AppSetting,而且肯定不是编译错误。奇怪的是,文档上说我可以设置值。不知道为什么会被否决。您提供了一个建议,指出这不是一个好的做法,并且还提供了OP要求的问题的进一步说明。