C#配置管理器。连接字符串

19

我有一个控制台应用程序,其中包含一个应用程序配置文件,该文件包含一个连接字符串,如下所示:

<configuration>
  <connectionStrings>
    <add name="Target" 
      connectionString="server=MYSERVER; Database=MYDB; Integrated Security=SSPI;" />
  </connectionStrings>
</configuration>

当我使用以下代码将其传递给我的 Connection 时:

ConfigurationManager.ConnectionStrings[1].ToString()

我有两个值,在集合中使用第二个,我的问题是这个第二个值是从哪里来的?

我已经检查了\Bin版本和原始版本,但它不是我的!显然它是系统生成的,但我以前从未见过这个?有人可以启发一下我吗?

神秘的连接字符串是:

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

这并不是一个问题,我只是想知道为什么会发生这种情况?谢谢!

对于未来可能或可能不会遇到这个问题的人们,请注意,发现 machine.config 后,明显按其索引引用配置是一种不好的做法,因为每个堆栈可能都不同,这就是为什么使用“Keys”的原因。

在这种情况下,我的代码应该是:

ConfigurationManager.ConnectionStrings["Target"].ToString()

大家好!


谢谢大家!我受到启发了 :) - Matt
4个回答

26

检查你的machine.config。如果你只想要你的条目,你可以像这样向<connectionStrings>元素添加一个<clear />元素...

<connectionStrings>
  <clear />
  <add name="Target" 
       connectionString=
             "server=MYSERVER; Database=MYDB; Integrated Security=SSPI;" />
</connectionStrings>

3

这个是在 machine.config 文件中定义的,它是全局的,适用于机器上所有 .Net 应用程序。

连接字符串通过配置层次结构“堆叠”,因此您自己的连接字符串元素名称标记为“add”。将您自己的连接字符串添加到机器级别的连接字符串列表中。

更好的选择可能是使用:

ConfigurationManager.ConnectionStrings["Target"].ConnectionString

为了确保您获得自己的连接字符串,即使修改了machine.config文件。

哈哈,我刚刚编辑了我的帖子以允许这样做,然后看到了你的编辑。非常正确! - Matt

3

请检查您的机器配置文件(位于WindowsDir\Framework下)。我刚刚检查了我的配置文件,发现与您的相同。


0

连接字符串标签中的索引第一个元素默认存储,并且它代表了MemberShip数据库连接字符串。

考虑到CLR将在应用程序中使用,因此CLR会代表您默认附加它。

就像在创建没有构造函数的类时,默认构造函数中CLR所做的一样。


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