C# ConfigurationManager从app.config获取了错误的连接字符串

3
我有一个简单的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 文件中检索连接字符串。

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文件。同时,经过调试,我可以确定它正在查找正确的程序集。

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


5
连接字符串需要存在于执行的项目中,而不是库项目中:例如,它需要存在于您的Winforms项目的app.config文件中。 - user47589
哦,那样就有道理了。我会修改我的代码并回报结果的 :) - Kyle Rone
3
在库中的 app.config 文件是供参考或编译时工具使用的。但在运行时,只有执行项目的 app.config 有效。 - user47589
3
如何从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" - Kiquenet
2个回答

2
正如 @Amy 指出的那样,这个问题没有得到解决是因为连接字符串没有存储在执行程序集的 app.config 文件中。移动后,现在它按照预期工作了。感谢您的快速帮助 :)

2

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


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