有没有办法在Asp.Net应用程序中在运行时向ConfigurationManager返回的ConnectionStringCollection添加连接字符串?
我尝试了以下但是被告知配置文件是只读的.
ConfigurationManager.ConnectionStrings.Add(new ConnectionStringSettings(params));
还有其他方法可以在运行时执行此操作吗?我知道在设计时我可以在web.config中添加连接字符串; 但是,我希望在运行时向该集合添加一些东西.
谢谢
编辑:我试图这样做的原因之一是由于安全要求阻止我将ConnectionStrings放在web.config(甚至加密).我想在我的项目中使用会员和个人资料等元素; 但是,我正在寻找一种替代方法来做这样的,而不是编写自定义提供程序.自定义提供商并不是那么糟糕,但如果我能找到一个更简单的解决方案,我就是全力以赴.
您可以使用反射来禁用私有bReadOnly字段(坏主意等):
typeof(ConfigurationElementCollection) .GetField("bReadOnly", BindingFlags.Instance | BindingFlags.NonPublic) .SetValue(ConfigurationManager.ConnectionStrings, false); ConfigurationManager.ConnectionStrings.Add(new ConnectionStringSettings());
这类似于修改现有连接字符串所需的技术,并由Brian Rodgers作为评论添加.
var cfg = System.Web.Configuration.WebConfigurationManager.OpenWebConfiguration(@"/"); cfg.ConnectionStrings.ConnectionStrings.Add(new ConnectionStringSettings(params)); cfg.Save();
建议这将导致您的网站回收,因为它修改了配置文件.查看http://msdn.microsoft.com/en-us/library/4c2kcht0(VS.80).aspx
只是想指出谁给你的"安全需求",你不能把在web.config中的连接字符串是个白痴.除了您的应用程序或远程访问服务器之外,Web.config永远不会被其他任何东西访问.
这听起来完全像一个需求问题,应该在那里解决.