读取app.config的connectionStrings元素

时间:2010-11-24 20:22:21

标签: c# configuration app-config configuration-files

我正在尝试从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或以这种方式访问​​任何其他子部分,我相信当我这样做时,配置是只读的。我无法对其进行任何更改,例如添加新的连接字符串或删除现有的连接字符串。我需要这样做。如果有办法在运行时修改配置文件,请告诉我。

6 个答案:

答案 0 :(得分:2)

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

答案 1 :(得分:2)

您是否有理由使用OpenExeConfiguration打开配置文件?如果它是您作为项目的一部分创建的app.config,您只需使用ConfigurationManager.ConnectionStrings

答案 2 :(得分:2)

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

在这种情况下,它会在ConfigurationManager.AppSettings["SettingName"]

答案 3 :(得分:1)

如果要编辑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(字符串)中存在一个错误,这意味着它始终会打开您的app.config。要从文件名中打开配置文件,您需要使用OpenMappedExeConfiguration()。

答案 4 :(得分:0)

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

尝试:

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

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

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

答案 5 :(得分:0)

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

重新启动修复它。