从外部配置文件读取连接字符串

时间:2013-04-22 13:46:53

标签: c# connection-string app-config external configuration-files

我创建了一个控制台应用程序和一个app.config文件以及Connections.config文件。 app.config文件有一个指向Connections.config

的connectionstring属性源

当我尝试读取应用程序中的连接字符串时,我得到ConfigurationErrorException

这是我的主要方法。

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

App.config文件

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

Connections.config文件

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

我在这里观察了两件事。 第一:如果我指定configSource,我无法读取连接字符串(抛出异常。)

第二:如果我在App.config文件中放入相同的连接字符串并尝试读取然后代码正在工作但是获得两个连接字符串(应该只返回一个空字符串) 第一个连接字符串是sqlexpress连接字符串,如下所示

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

它返回的第二个连接字符串是空字符串(这是预期的)。

我想从我的场景中读取外部文件中的连接字符串。怎么做?我在这里缺少什么?

4 个答案:

答案 0 :(得分:9)

MSDN says

  

不要包含任何其他元素,部分或属性。

您需要删除XML编码。

修改

此外,您需要将配置文件的属性设置为Copy to Output Directory = Copy if newerCopy always

enter image description here

修改2

在Dave所说的基础上,将clear元素添加到外部文件中。您的最终Connections.config文件应如下所示:

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

答案 1 :(得分:6)

您的Connections.config文件应如下所示,不带xml标题

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

另外,要在控制台应用程序中正确找到该文件,请将复制到输出目录设置为始终复制复制如果更新

答案 2 :(得分:1)

您获得的第一个连接字符串是从machine.config继承的。这在MSDN文档中有所描述。 http://msdn.microsoft.com/en-us/library/bf7sd233(v=vs.90).aspx

您可以使用配置文件中的Clear标记删除继承的连接字符串。 http://msdn.microsoft.com/en-us/library/ayb15wz8(v=vs.90).aspx

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

答案 3 :(得分:0)

MSDN上有一篇很好的文章:https://msdn.microsoft.com/en-us/library/ms254494(v=vs.110).aspx

引用文章:

  

要在外部配置文件中存储连接字符串,请创建   一个单独的文件,只包含connectionStrings部分。做   不包含任何其他元素,部分或属性。这个   示例显示外部配置文件的语法。

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

希望这可以帮助后来遇到这个问题的人。