更改成员连接字符串
我是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来访问私有字段的需要。
- MonoState,Singleton或Derived Forms:CRUD应用程序的最佳方法?
- 如何在不同的命名空间中处理相同的类名?
- 使用Task.Factory时捕获错误
- 使用entity framework中的属性映射多对多关系
- 为什么WebBrowser_DocumentCompleted()会触发两次?
- 如何在XAML中“创建”的Code Behind中访问控件
- 在.NET 4中使用IntPtr时出现PInvokeStackImbalanceexception? (适用于.NET 3.5)
- 是否可以使用Twilio签名的RestSharp NuGet包?
- 带有重定向输入/输出流的HTML中的wkhtmltopdf相对路径将不起作用