2010-08-09 48 views
3

動態更改的connectionString在我的web.config在web.config中

<connectionStrings> 
    <add name="ActiveDirectoryConnection" connectionString="LDAP://ActiveDirectoryDomain1.com" providerName="System.Web.Security.ActiveDirectoryMembershipProvider"/> 
</connectionStrings> 

我需要一個下拉框添加到我的登錄頁面,允許用戶向的connectionString更改爲不同的字符串我有以下的,例如「LDAP://ActiveDirectoryDomain2.com」

在C#代碼後面如何改變connectionString的值?


更多信息:

我遇到的問題是,有4個其他的web.config設置稱之爲一個的connectionString。例如:

<activeDirectorySecurityContextSettings connectionStringName="ActiveDirectoryConnection" defaultADUserName="ReportUser" defaultADPassword="password"/> 

謝謝!

回答

7

如果用戶能夠更改設置的值,那麼web.config文件是存儲設置的錯誤位置。

您應該檢出設置文件中的用戶範圍值。

MSDN - Using Settings in C#

當使用這樣的設置,在運行時更改的值很簡單:

Properties.Settings.Default.LdapConnectionString = "New Connection String"; 
Properties.Settings.Default.Save(); 
+0

或者交替進行,如果你希望它是應用範圍(我想喜歡的應用程序管理員可能希望對所有用戶的應用程序數據庫進行更改,而不是針對每個連接的更改),那麼您可以對所有連接字符串使用單例類,並在您的應用程序接口中將單元類更改爲...這些數據可以在其他地方保存,並且仍然可以在應用程序會話之間保存。 – jcolebrand 2010-08-09 16:00:47

+0

@drachenstern - 實際上,使用設置仍然會更聰明。您只需使其成爲應用程序範圍而不是用戶。比嘗試實現另一個世界不需要的單例更容易。 – 2010-08-09 16:03:55

+0

我遇到的問題是有4個其他web.config設置調用一個connectionString。例如: 所以看來我不能把它放在設置文件。 – user390480 2010-08-09 17:44:03

2
var settings = ConfigurationManager.ConnectionStrings[ 0 ]; 

var fi = typeof(ConfigurationElement).GetField("_bReadOnly", BindingFlags.Instance | BindingFlags.NonPublic); 

fi.SetValue(settings, false); 

settings.ConnectionString = "Data Source=Something"; 
3
  • 這是一個壞主意,從裏面的程序修改* config文件。
  • 網頁修改您的網站根文件夾中的任何文件是一個壞主意。
  • 擁有權限設置允許網頁修改您網站的根文件夾中的文件是個壞主意。

基本上,您需要忘掉web.config,並將您的代碼構造爲使用僅存在於內存中的連接字符串。

0

即使這是一個壞主意,從一個應用程序內修改web.config文件,你可以試試這個:

System.Configuration.ConfigurationManager.AppSettings.Set("keyToBeReplaced", "newKeyValue"); 
+0

這不會做OP所要求的。 – 2012-12-28 05:03:00