user390480
user390480

Reputation: 1665

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!

Upvotes: 3

Views: 15925

Answers (4)

Jobert Enamno
Jobert Enamno

Reputation: 4461

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

Upvotes: 0

James Curran
James Curran

Reputation: 103505

  • 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.

Upvotes: 3

Eton B.
Eton B.

Reputation: 6281

var settings = ConfigurationManager.ConnectionStrings[ 0 ];

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

fi.SetValue(settings, false);

settings.ConnectionString = "Data Source=Something";

Upvotes: 2

Justin Niessner
Justin Niessner

Reputation: 245419

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();

Upvotes: 7

Related Questions