有没有一种方法可以将连接字符串添加到Asp.Net应用程序中运行时由ConfigurationManager返回的ConnectionStringCollection?
我已经尝试了以下操作,但被告知配置文件是只读的。
ConfigurationManager.ConnectionStrings.Add(new ConnectionStringSettings(params));
有没有其他方法可以在运行时做到这一点?我知道在设计时可以向web.config中添加连接字符串;但是,我希望在运行时向该集合中添加一些内容。
谢谢
编辑:我尝试这样做的原因之一是出于安全要求,它阻止我在web.config中放置ConnectionStrings (即使是加密的)。我想在我的项目中使用像成员资格和配置文件这样的元素;然而,我正在寻找一种替代方案,而不是编写一个自定义的提供者。自定义提供者并不是那么糟糕,但如果我能找到一个更简单的解决方案,我会全力支持。
发布于 2008-12-10 20:49:54
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
发布于 2011-12-14 02:29:42
您可以使用反射来禁用私有bReadOnly字段(不好的主意,等等):
typeof(ConfigurationElementCollection)
.GetField("bReadOnly", BindingFlags.Instance | BindingFlags.NonPublic)
.SetValue(ConfigurationManager.ConnectionStrings, false);
ConfigurationManager.ConnectionStrings.Add(new ConnectionStringSettings());
这类似于modify an existing connection string所需的技术,并由Brian Rodgers在那里作为注释添加。
发布于 2008-12-10 21:01:29
我只想指出,无论是谁给了您“安全要求”,即您不能将连接字符串放在web.config中,那么他就是一个笨蛋。除了您的应用程序或对服务器的远程访问之外,永远不能通过任何其他方式访问web.config。
这听起来完全像是一个需求问题,应该在那里解决。
https://stackoverflow.com/questions/357465
复制相似问题