2023-02-16 431
我正在创建一个自定义sqlmembershipprovider类,以向基类添加一些增强的功能.但是,我陷入了处理连接字符串.如何从配置中读取连接字符串名称,并使其余方法可用?
现在我有:
public override void Initialize(string name, NameValueCollection config)
{
base.Initialize(name, config);
_ConnectionStringName = config["connectionStringName"];
}
但在其他方法中,_connectionStringname变量为null:
SqlConnection conn = new SqlConnection(ConfigurationManager.ConnectionStrings[_ConnectionStringName].ConnectionString)
存储连接字符串名称的正确方法是什么,因此在我的自定义会员提供者中全球可用?
谢谢!
ProviderBase将抛出a ConfigurationException如果在配置收集中剩下任何条目,所以每个提供者在调用base.Initialize之前删除它的配置条目.
问题,正如此答案是您必须在调用base.Initialize之前获取您的值.
对不起,我乍一看了.
这篇文章的其余部分是历史历史,而在技术上是正确的,误导这里的突出问题如上所述.
首先 – 尝试WebConfigurationManager.ConnectionStrings.
WebConfigurationManager手柄从Windows \ Microsoft.NET \ Framework \ 2.0xxxx \ Web.config一直到您的应用程序的所有方式应用Web.config的层次结构.
此行为不存在于ConfigurationManager中,该行为通常处理machine.config到app.config.
如果这不解决您的问题,则必须覆盖代码中其他地方的值,如果确实在Initialize中正确分配了.
首先,设置断点并确保按预期设置_ConnectionStringName.
然后定位对该字段的所有引用,并确保您没有错误.
这是假设,当然,_ConnectionStringName是一个私有字段.如果不是,请制作它,并寻找您的编译错误.
不确定是否有帮助,但是我在需要覆盖SQLMembershipProvider的子类中的ConnectionString时具有类似的问题.
这个想法不是我自己的 – 我在这个论坛发布的评论部分找到了它:
http://forums.asp.net/p/997608/2209437.aspx
public override void Initialize(string name, NameValueCollection config)
{
base.Initialize(name, config);<br>
string connectionString = //...what you want your connection string to be,
//so config["connectionStringName"]...
// Set private property of Membership provider.
System.Reflection.FieldInfo connectionStringField =
GetType().BaseType.GetField("_sqlConnectionString",
System.Reflection.BindingFlags.Instance
| System.Reflection.BindingFlags.NonPublic);
connectionStringField.SetValue(this, connectionString);
}
我的道歉 – 我以前从未发布过,所以格式可能是子标准!
这可能是6个月太晚了,但我能够以这种方式获得连接字符串:
using System.Web.Configuration;
Configuration config = WebConfigurationManager.OpenWebConfiguration("~");
MembershipSection section = config.SectionGroups["system.web"].Sections["membership"] as MembershipSection;
string defaultProvider = section.DefaultProvider;
string connstringName = section.Providers[defaultProvider].ElementInformation.Properties["connectionStringName"].Value.ToString();
string val = config.ConnectionStrings.ConnectionStrings[connstringName].ConnectionString;
这使得默认提供程序具有连接字符串属性的假设 – 但是如果您将SqlMembershipProvider子类化,则应始终在Web.config链中始终有一个,但它在机器中定义了我相信的. .
所有这些,将一个方法添加到更改用户名.
以上所述是小编给大家介绍的自定义ASP.NET SqlMembershipProvider处理的连接字符串,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对77isp云服务器技术网的支持!
原文链接:https://77isp.com/post/34005.html
=========================================
https://77isp.com/ 为 “云服务器技术网” 唯一官方服务平台,请勿相信其他任何渠道。
数据库技术 2022-03-28
网站技术 2022-11-26
网站技术 2023-01-07
网站技术 2022-11-17
Windows相关 2022-02-23
网站技术 2023-01-14
Windows相关 2022-02-16
Windows相关 2022-02-16
Linux相关 2022-02-27
数据库技术 2022-02-20
抠敌 2023年10月23日
嚼餐 2023年10月23日
男忌 2023年10月22日
瓮仆 2023年10月22日
簿偌 2023年10月22日
扫码二维码
获取最新动态