2010-11-24 112 views
5

我想从我的app.config中读取连接字符串,但它只显示我一个连接字符串,这也不在我的app.config中。阅读你的app.config的connectionStrings元素

这里是我的代码:

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或以这种方式访问​​任何其他小节,但我相信当我这样做时,配置是只读的。我无法对其进行任何更改,例如添加新的连接字符串或删除现有的连接字符串。我需要这样做。请让我知道是否有办法在运行时修改配置文件。

回答

0

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

尝试:

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

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

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

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

+0

我试过了。虽然没有运气。 – 2010-11-24 20:50:03

2

是否有您使用OpenExeConfiguration打开你的配置文件的一个原因?如果它是您作为项目的一部分创建的app.config,则只需使用ConfigurationManager.ConnectionStrings即可。

2

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

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

0

我有一个小的控制台应用程序我写的(包含在一个更大的web应用程序的解决方案)完全相同的问题 - 它似乎是我的app.config不再被拿起来了,唯一的连接字符串是我回来的是LocalSqlServer。

重新启动修复它。

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()。