2010-03-09 121 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;

相關問題