读取 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 元素的主要内容,如果未能解决你的问题,请参考以下文章
装配的 App.Config 被忽略;改为读取 Machine.config
Windows 服务安装程序未读取 App.Config 文件
如何使用 PowerShell 读取/写入 App.config 设置?