Dynamically change connectionString in web.config

I have the following in my web.config

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

I need to add a dropdown box to my login page that allows the user to change the connectionString to a different string, e.g. “LDAP://ActiveDirectoryDomain2.com”

In C# code behind how do change the connectionString value?


More info:

The problem I am having is that there are 4 other web.config settings call that one connectionString. For example:

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

Thanks!

Answers:

Thank you for visiting the Q&A section on Magenaut. Please note that all the answers may not help you solve the issue immediately. So please treat them as advisements. If you found the post helpful (or not), leave a comment & I’ll get back to you as soon as possible.

Method 1

If a user is able to change the value of the Setting, then the web.config file is the wrong place to store the setting.

You should check out a User Scoped value in a Settings file instead.

MSDN – Using Settings in C#

When using settings like this, changing the value at runtime is easy:

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

Method 2

  • It’s a bad idea to modify a *.config file from inside the program.
  • It’s a bad idea for a webpage to modify any file in the root folder of your website.
  • It’s a bad idea to have permission set allowing a web page the modification of files in the root folder of your website.

Basically, you need to forget about the web.config, and structure your code to use a connection string the exist only in memory.

Method 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";

Method 4

Even if it’s a bad idea to modify the web.config file from inside an app, you can try this:

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


All methods was sourced from stackoverflow.com or stackexchange.com, is licensed under cc by-sa 2.5, cc by-sa 3.0 and cc by-sa 4.0

0 0 votes
Article Rating
Subscribe
Notify of
guest

0 Comments
Inline Feedbacks
View all comments
0
Would love your thoughts, please comment.x
()
x