更改成员连接字符串

我是asp.net会员新手,我需要帮助以编程方式更改其连接字符串。

我到现在为止尝试的是

我创建了一个类项目名称Sample as namespace **并扩展了System.Web.Security.SqlMembershipProvider

代码为

 namespace Sample { public class Connectionstring : SqlMembershipProvider { public override void Initialize(string name, System.Collections.Specialized.NameValueCollection config) { string connectionString = "server=xx.xx.xx;database=db;user id=un;password=pwd"; // Set private property of Membership provider. FieldInfo connectionStringField = GetType().BaseType .GetField("_sqlConnectionString", BindingFlags.Instance | BindingFlags.NonPublic); connectionStringField.SetValue(this, connectionString); } } } 

并将成员标记中的Web配置文件更改为

      

并且在运行Web应用程序项目时,我正在更改的连接字符串不会被更改?

等待您的宝贵回复和评论

我在网上发现的关于问题的是这里 :

一个更简单但有点令人讨厌的解决方案就是在请求的生命周期中尽早修改提供程序中的连接字符串:

  private void SetProviderConnectionString(string connectionString) { var connectionStringField = Membership.Provider.GetType().GetField("_sqlConnectionString", BindingFlags.Instance | BindingFlags.NonPublic); if (connectionStringField != null) connectionStringField.SetValue(Membership.Provider, connectionString); } 

从Application_PreRequestHandlerExecute中的Global.asax.cs调用此方法可以完成这项工作。 没有测试太多,但即使某些东西不起作用,也只是意味着它需要提前完成。 不能保证这将适用于框架的未来版本,尽管它很可能会。

因此,可以手动调用’SetProviderConnectionString’方法(在Initialize方法完成之后),而不是期望框架在第一次引用Membership.Provider时调用覆盖的Initialize方法。

您为什么不在Web配置中使用连接字符串?

通常,Web服务器将使用Web服务器的凭据访问数据库,而不是单个用户的凭据。

这是asp.net身份validation的通用设置指南。 http://vstudiojourney.blogspot.com/2008/06/choosing-another-database-for.html

您似乎没有调用base.Initialize来自您的Initialize覆盖。 在这种情况下,我感到很惊讶。

在.NET 4中(不确定早期版本),您应该能够在调用base.Initialize之前将连接字符串添加到配置集合中,如下所示:

 public override void Initialize(string name, NameValueCollection config) { config["connectionString"] = ... whatever ...; base.Initialize(name, config); } 

这避免了使用reflection来访问私有字段的需要。