读取 app.config 的 connectionStrings 元素

Posted

技术标签:

【中文标题】读取 app.config 的 connectionStrings 元素【英文标题】:Read connectionStrings element of your app.config 【发布时间】:2011-05-15 08:15:54 【问题描述】:

我正在尝试从我的 app.config 中读取连接字符串,但它只显示一个连接字符串,而且我的 app.config 中也没有。

这是我的代码:

System.Diagnostics.Debugger.Break();

Configuration config = 
ConfigurationManager.OpenExeConfiguration(
                    AppDomain.CurrentDomain.SetupInformation.ConfigurationFile);

foreach (var connectionString in config.ConnectionStrings.ConnectionStrings)
    System.Diagnostics.Debug.Print(connectionString.ToString());

然后打印出来:

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

当我期望它打印出一个自定义 connectionString 到我在 app.config 文件中指定的数据库之一时。

更新

感谢大家花时间解决我的问题并提供帮助。尽管你们都说对了,我可以简单地使用ConfigurationManager.ConnectionStrings 或以这种方式访问​​任何其他小节,但我相信当我这样做时,配置是只读的。我无法对其进行任何更改,例如添加新的连接字符串或删除现有的连接字符串。我需要这样做。如果有办法在运行时修改配置文件,请告诉我。

【问题讨论】:

【参考方案1】:

它从您的 machine.config 中读取。 在 app.config 中 <connectionStrings> 之后插入 <clear/>.

【讨论】:

【参考方案2】:

您使用OpenExeConfiguration 打开配置文件有什么原因吗?如果它是您在项目中创建的 app.config,您只需使用 ConfigurationManager.ConnectionStrings

【讨论】:

【参考方案3】:

ConfigurationManager.ConnectionStrings["ConnectionStringName"] 应该这样做,除非它被存储为 appSetting。

在这种情况下,它将位于ConfigurationManager.AppSettings["SettingName"]

【讨论】:

【参考方案4】:

如果要编辑 ConnectionStrings(或 app.config 中的任何部分),则需要使用 Configuration 对象的 GetSection() 方法返回的对象。

Configuration config = ConfigurationManager.OpenExeConfiguration(ConfigurationUserLevel.None);
ConnectionStringsSection csSettings = config.GetSection("connectionStrings") as ConnectionStringsSection;
if(csSettings != null)

    // examples of removing all settings, adding a new one and removing it
    csSettings.ConnectionStrings.Clear();
    csSettings.ConnectionStrings.Add(new ConnectionStringSettings("myCS", "<connectionString>"));
    csSettings.ConnectionStrings.Remove("myCS");
    // save the changes
    config.Save(ConfigurationSaveMode.Modified);

根据我的经验,OpenExeConfiguration(string) 中存在一个错误,这意味着它始终会打开您的 app.config。要从文件名打开配置文件,您需要使用 OpenMappedExeConfiguration()。

【讨论】:

【参考方案5】:

你能读出任何配置设置(除了连接字符串)吗?

试试:

System.Configuration.ConfigurationManager.AppSettings("MyAppVariable");

此外,该语法看起来有点复杂。试试这个更简单的版本:

System.Configuration.ConfigurationManager.ConnectionStrings("MyConnectionString").ConnectionString

【讨论】:

【参考方案6】:

我编写的一个小型控制台应用程序(包含在一个更大的 Web 应用程序解决方案中)遇到了完全相同的问题 - 似乎我的 app.config 根本不再被拾取,并且我得到的唯一连接字符串后面是 LocalSqlServer。

重启解决了它。

【讨论】:

以上是关于读取 app.config 的 connectionStrings 元素的主要内容,如果未能解决你的问题,请参考以下文章

c# 读取App.config

装配的 App.Config 被忽略;改为读取 Machine.config

Windows 服务安装程序未读取 App.Config 文件

如何使用 PowerShell 读取/写入 App.config 设置?

从 .NET 中的 app.config 或 web.config 读取设置

如何让 ConfigurationManager 读取 app.config 以外的配置文件?