Welcome to OGeek Q&A Community for programmer and developer-Open, Learning and Share
Welcome To Ask or Share your Answers For Others

Categories

0 votes
205 views
in Technique[技术] by (71.8m points)

c# - 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?

See Question&Answers more detail:os

与恶龙缠斗过久,自身亦成为恶龙;凝视深渊过久,深渊将回以凝视…
Welcome To Ask or Share your Answers For Others

1 Reply

0 votes
by (71.8m points)

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>

与恶龙缠斗过久,自身亦成为恶龙;凝视深渊过久,深渊将回以凝视…
OGeek|极客中国-欢迎来到极客的世界,一个免费开放的程序员编程交流平台!开放,进步,分享!让技术改变生活,让极客改变未来! Welcome to OGeek Q&A Community for programmer and developer-Open, Learning and Share
Click Here to Ask a Question

...