从外部配置文件中读取连接字符串
Posted
技术标签:
【中文标题】从外部配置文件中读取连接字符串【英文标题】:Reading connection string from external config file 【发布时间】:2013-04-15 10:50:23 【问题描述】:我已经创建了一个控制台应用程序和一个 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
它返回的第二个连接字符串是空字符串(这是预期的)。
我想从外部文件中读取连接字符串,就像在我的场景中一样。怎么做?我在这里错过了什么?
【问题讨论】:
【参考方案1】:MSDN says:
不要包含任何其他元素、部分或属性。
您需要删除 XML 编码。
编辑
另外,您需要将配置文件的属性设置为Copy to Output Directory = Copy if newer
或Copy always
。
编辑 2
要建立在 Dave 所说的基础上,您将 clear
元素添加到您的外部文件中。你最终的Connections.config
文件应该看起来像这样:
<connectionStrings>
<clear/>
<add name="Name"
providerName="System.Data.ProviderName"
connectionString="Valid Connection String;" />
</connectionStrings>
【讨论】:
构建操作不是强制性的,如果将复制到输出目录设置为始终复制或如果更新则复制,构建操作默认为内容。否则很好回答 - +1【参考方案2】:您的 Connections.config 文件应如下所示,没有 xml 标头
<connectionStrings>
<add name="SQLDBConnecion"
providerName="System.Data.ProviderName"
connectionString="" />
</connectionStrings>
为了让它在您的控制台应用程序中正确定位文件,请将复制到输出目录设置为始终复制或如果较新则复制.
【讨论】:
xml 标头没有任何区别。设置副本总是解决问题。谢谢。【参考方案3】:您获得的第一个连接字符串是从 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>
【讨论】:
【参考方案4】: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>
希望这对以后遇到这个问题的人有所帮助。
【讨论】:
以上是关于从外部配置文件中读取连接字符串的主要内容,如果未能解决你的问题,请参考以下文章