Reading connection string from external config file

PSR picture PSR · Apr 22, 2013 · Viewed 18.1k times · Source

I have created a console application and an app.config file and Connections.config file. The app.config file has a connectionstring property source pointing to the Connections.config

When I tried to read the connection string in the application, I get a ConfigurationErrorException

This is my main method.

static void Main(string[] args)
    {
        var settings = ConfigurationManager.ConnectionStrings;
        if (settings != null)
        {
            foreach (ConnectionStringSettings setting in settings)
            {
                Console.WriteLine(setting.ConnectionString);
            }
        }
    }

App.config file

<?xml version="1.0" encoding="utf-8" ?>
<configuration>
  <connectionStrings configSource="Connections.config"></connectionStrings>
</configuration>

Connections.config file

<?xml version="1.0" encoding="utf-8" ?>
<connectionStrings>
  <add name="SQLDBConnecion"
   providerName="System.Data.ProviderName"
   connectionString="" />
</connectionStrings>

Here I observed two things. First: If I specify configSource I am unable to read the connection string (throwing exception.)

Second: If I put same connection string in App.config file and tried to read then the code is working but getting two connection string (which supposed to be return only one which is empty string) The first connection string is sqlexpress connection string like this

data source=.\SQLEXPRESS;Integrated Security=SSPI;
     AttachDBFilename=|DataDirectory|aspnetdb.mdf;User Instance=true

second connection string it returning is empty string (This is expected).

I want to read connection string from external file like in my scenario. How to do that? What am I missing here?

Answer

Joey Gennari picture Joey Gennari · Apr 22, 2013

MSDN says:

Do not include any additional elements, sections, or attributes.

You need to remove the XML encoding.

Edit

Also, you need to set the properties of your config file to Copy to Output Directory = Copy if newer or Copy always.

enter image description here

Edit 2

To build on what Dave said, you add the clear element to your external file. Your final Connections.config file should look exactly like this:

<connectionStrings>
  <clear/>
  <add name="Name"
     providerName="System.Data.ProviderName"
     connectionString="Valid Connection String;" />
</connectionStrings>