C# ConfigurationManager 从 app.config 检索错误的连接字符串

Posted

技术标签:

【中文标题】C# ConfigurationManager 从 app.config 检索错误的连接字符串【英文标题】:C# ConfigurationManager retrieves wrong connection string from app.config 【发布时间】:2017-07-11 10:25:07 【问题描述】:

我有一个简单的 WinForms 应用程序,它最终将成为一个游戏。现在,我只是在处理它的数据访问层,我遇到了一个障碍。我创建了一个名为DataAccess 的单独项目,并在其中创建了一个本地.mdf SQL Server 数据库文件。我还创建了一个app.config 文件来存储连接字符串。

这是配置文件:

<?xml version="1.0" encoding="utf-8" ?>
<configuration>
    <connectionStrings>
        <add name="TBG_Master"
             connectionString="Data Source=(localdb)\MSSQLLocalDb;Integrated Security=true;AttachDbFileName=|DataDirectory|\TBG_Master.mdf"
             providerName="System.Data.SqlClient"/>
    </connectionStrings>
</configuration>

为了从 app.config 文件中检索连接字符串,我使用了从 this 问题中提取的代码。

Assembly service = Assembly.GetExecutingAssembly();
ConnectionStringsSection css = ConfigurationManager.OpenExeConfiguration(service.Location).ConnectionStrings;
string cs = css.ConnectionStrings["TBG_Master"].ConnectionString;
return cs;

当它到达使用字符串作为键提取连接字符串的行时,它给了我一个空引用异常。在检查了css.ConnectionString 集合后,其中唯一的连接字符串如下所示:

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

这显然不是我的app.config 文件中的内容,而且我知道我的DataAccess 项目中没有其他app.config 文件。同样在调试之后,我知道它正在寻找正确的程序集。

为什么它给了我这个连接字符串而不是正确的?

【问题讨论】:

连接字符串需要存在于执行的项目中,而不是库项目中:例如它需要在您的 Winforms 项目的 app.config 中。 Ohhhhhhhhhhhhhhhhhh 好吧,那是有道理的。我会更改我的代码并报告它是否有效:) 库中的 app.configs 供参考,或用于编译时工具。但是在运行时,只有执行项目的 app.config 才算。 如何只从 app.config/web.config 获取连接字符串,而不是 machine.config?在 machine.config 中是一个名为“LocalSqlServer”的连接字符串;默认提供程序(如预期)是“System.Data.SqlClient”,连接字符串是data source=.\SQLEXPRESS;Integrated Security=SSPI;AttachDBFilename=|DataDirectory|aspnetdb.mdf;User Instance=true", 【参考方案1】:

正如@Amy 指出的那样,这不起作用的原因是连接字符串未存储在正在执行的程序集 app.config 文件中。移动它后,它现在可以正常工作了。感谢您的快速帮助:)

【讨论】:

【参考方案2】:

您还可以使用 machine.config 文件来保存独立于给定机器的任何应用程序的连接字符串。这样它们就不必在任何 app.config 文件中,因为所有应用程序都会自动读取它们正在执行的机器上的 machine.config 文件。

【讨论】:

以上是关于C# ConfigurationManager 从 app.config 检索错误的连接字符串的主要内容,如果未能解决你的问题,请参考以下文章

如何从 C# 测试 sql 查询执行? [复制]

C#代码: string a = ConfigurationManager.AppSettings["DBType"].ToString(); app.config里要怎么写,以

求.net(C#)读写config配置文件的经典实例

using System.Configuration显示灰色,当前上下文中不存在名称“ConfigurationManager”

using System.Configuration显示灰色,当前上下文中不存在名称“ConfigurationManager”

使用 ConfigurationManager 从任意位置加载配置