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

时间:2017-02-21 16:55:13

标签: c# winforms connection-string app-config

我有一个简单的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文件中的内容,我知道我的app.config项目中没有其他DataAccess文件。在调试之后,我知道它正在查找正确的程序集。

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

2 个答案:

答案 0 :(得分:2)

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

答案 1 :(得分:1)

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