【问题标题】:Dynamically change connectionString in web.config动态更改 web.config 中的 connectionString
【发布时间】:2010-08-09 15:51:26
【问题描述】:

我的 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 设置调用那个连接字符串。例如:

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

谢谢!

【问题讨论】:

    标签: c# asp.net connection-string


    【解决方案1】:

    如果用户能够更改设置的值,则 web.config 文件是存储设置的错误位置。

    您应该在设置文件中检查用户范围值。

    MSDN - Using Settings in C#

    当使用这样的设置时,在运行时更改值很容易:

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

    【讨论】:

    • 或者,如果您希望它是应用程序范围的(我想应用程序管理员可能希望为所有用户更改应用程序数据库,而不是每个连接的更改)那么您可以对所有连接字符串使用单例类,并从您的应用界面在单例类中更改它们...然后可以将这些数据保存在其他地方,并且仍然可以在应用会话之间保存。
    • @drachenstern - 实际上,使用设置仍然会更聪明。您只需将其设为应用程序范围而不是用户。比尝试实现另一个世界不需要的 Singleton 容易得多。
    • 我遇到的问题是有 4 个其他 web.config 设置调用那个连接字符串。例如: 所以看来我不能把它放在设置文件中。
    • ~ 谢谢,我知道我需要重新设置设置,我认为它是基于用户的,而不是应用程序... /facepalm 再次罢工!
    【解决方案2】:
    • 从程序内部修改 *.config 文件是个坏主意。
    • 让网页修改网站根文件夹中的任何文件都是一个坏主意。
    • 设置允许网页修改网站根文件夹中文件的权限是个坏主意。

    基本上,您需要忘记 web.config,并构造您的代码以使用仅存在于内存中的连接字符串。

    【讨论】:

      【解决方案3】:
      var settings = ConfigurationManager.ConnectionStrings[ 0 ];
      
      var fi = typeof( ConfigurationElement ).GetField( "_bReadOnly", BindingFlags.Instance | BindingFlags.NonPublic );
      
      fi.SetValue(settings, false);
      
      settings.ConnectionString = "Data Source=Something";
      

      【讨论】:

        【解决方案4】:

        即使从应用程序内部修改web.config 文件是个坏主意,您也可以试试这个:

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

        【讨论】:

        • 这不符合 OP 的要求。
        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2013-10-15
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2021-07-18
        • 2017-05-06
        相关资源
        最近更新 更多