首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >我可以在运行时将ConnectionStrings添加到ConnectionStringCollection吗?

我可以在运行时将ConnectionStrings添加到ConnectionStringCollection吗?
EN

Stack Overflow用户
提问于 2008-12-10 20:19:48
回答 8查看 17.2K关注 0票数 20

有没有一种方法可以将连接字符串添加到Asp.Net应用程序中运行时由ConfigurationManager返回的ConnectionStringCollection?

我已经尝试了以下操作,但被告知配置文件是只读的。

代码语言:javascript
复制
ConfigurationManager.ConnectionStrings.Add(new ConnectionStringSettings(params));

有没有其他方法可以在运行时做到这一点?我知道在设计时可以向web.config中添加连接字符串;但是,我希望在运行时向该集合中添加一些内容。

谢谢

编辑:我尝试这样做的原因之一是出于安全要求,它阻止我在web.config中放置ConnectionStrings (即使是加密的)。我想在我的项目中使用像成员资格和配置文件这样的元素;然而,我正在寻找一种替代方案,而不是编写一个自定义的提供者。自定义提供者并不是那么糟糕,但如果我能找到一个更简单的解决方案,我会全力支持。

EN

回答 8

Stack Overflow用户

回答已采纳

发布于 2008-12-10 20:49:54

代码语言:javascript
复制
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

票数 11
EN

Stack Overflow用户

发布于 2011-12-14 02:29:42

您可以使用反射来禁用私有bReadOnly字段(不好的主意,等等):

代码语言:javascript
复制
typeof(ConfigurationElementCollection)
    .GetField("bReadOnly", BindingFlags.Instance | BindingFlags.NonPublic)
    .SetValue(ConfigurationManager.ConnectionStrings, false);
ConfigurationManager.ConnectionStrings.Add(new ConnectionStringSettings());

这类似于modify an existing connection string所需的技术,并由Brian Rodgers在那里作为注释添加。

票数 34
EN

Stack Overflow用户

发布于 2008-12-10 21:01:29

我只想指出,无论是谁给了您“安全要求”,即您不能将连接字符串放在web.config中,那么他就是一个笨蛋。除了您的应用程序或对服务器的远程访问之外,永远不能通过任何其他方式访问web.config。

这听起来完全像是一个需求问题,应该在那里解决。

票数 10
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/357465

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档