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

13

我创建了一个控制台应用程序以及一个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);
            }
        }
    }

应用程序配置文件

<?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个回答

10

MSDN指出:

不要包含任何附加元素、部分或属性。

您需要删除XML编码。

编辑

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

输入图像描述

编辑2

根据Dave所说,您需要将clear元素添加到您的外部文件中。您的最终Connections.config文件应该完全与此相同:

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

构建操作不是强制性的,如果将“复制到输出目录”设置为“始终复制”或“仅在更新时复制”,则构建操作默认为内容。否则回答得很好 - +1 - Patrick D'Souza

6
您的Connections.config文件应如下所示,不包含xml头部:
<connectionStrings>
  <add name="SQLDBConnecion"
   providerName="System.Data.ProviderName"
   connectionString="" />
</connectionStrings>

此外,为了使您的控制台应用程序能够正确地定位文件,请将复制到输出目录设置为始终复制仅在更改时复制

XML头部没有任何区别。将复制设置为始终解决了问题。谢谢。 - PSR

1

0

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

文章摘录:

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

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

希望这篇文章能够帮助那些以后遇到这个问题的人。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接