13

我创建了一个控制台应用程序和一个 app.config 文件和 Connections.config 文件。app.config 文件有一个指向 Connections.config 的连接字符串属性源

当我尝试读取应用程序中的连接字符串时,我得到一个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

4 回答 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>
于 2013-04-22T13:54:36.440 回答
6

您的 Connections.config 文件应如下所示,没有 xml 标头

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

此外,为了在您的控制台应用程序中正确定位文件,请将Copy to Output Directory设置为Copy AlwaysCopy If Newer

于 2013-04-22T13:56:17.570 回答
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>
于 2013-04-22T14:01:37.617 回答
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>

希望这对以后遇到这个问题的人有所帮助。

于 2016-05-11T18:09:47.557 回答