Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Reading connection string from external config file

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?

like image 889
PSR Avatar asked Apr 22 '13 13:04

PSR


2 Answers

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>
like image 66
Joey Gennari Avatar answered Oct 12 '22 23:10

Joey Gennari


Your Connections.config file should be as shown below without the xml header

<connectionStrings>
  <add name="SQLDBConnecion"
   providerName="System.Data.ProviderName"
   connectionString="" />
</connectionStrings>

Also for it to correctly locate the file in your console application, please set the Copy to Output Directory to Copy Always or Copy If Newer.

like image 30
Patrick D'Souza Avatar answered Oct 13 '22 00:10

Patrick D'Souza