gpt4 book ai didi

c# - 为自定义 asp.net 成员提供程序提供自定义数据库功能

转载 作者:太空狗 更新时间:2023-10-29 23:04:19 27 4
gpt4 key购买 nike

我正在为我的 asp.net 应用程序创建自定义成员资格提供程序。我还创建了一个单独的类“DBConnect”,它提供数据库功能,例如执行 SQL 语句、执行 SP、执行 SP 或查询并返回 SqlDataReader 等等...

我在 Global.asax 的 Session_Start 中创建了 DBConnect 类的实例并存储到 session 中。稍后使用静态类,我使用同一个 session 在整个应用程序中提供数据库功能。简而言之,我为来自任何 asp.net 页面的所有数据库操作提供了一个单一的点。

我知道我可以编写自己的代码来连接/断开数据库并从我需要覆盖的方法中执行 SP。请看下面的代码-

public class SGI_MembershipProvider : MembershipProvider
{

……

    public override bool ChangePassword(string username, string oldPassword, string newPassword)
{
if (!ValidateUser(username, oldPassword))
return false;

ValidatePasswordEventArgs args = new ValidatePasswordEventArgs(username, newPassword, true);

OnValidatingPassword(args);

if (args.Cancel)
{
if (args.FailureInformation != null)
{
throw args.FailureInformation;
}
else
{
throw new Exception("Change password canceled due to new password validation failure.");
}
}

.....

//Database connectivity and code execution to change password.

}

....

}

我的问题 - 现在我需要的是从顶部描述的相同数据库点在所有这些重写方法中执行数据库部分。也就是说,我必须将 session 中存在的 DBConnect 实例传递给此类,以便我可以访问这些方法。

谁能提供解决方案。可能有一些我不知道的更好的技术。我使用的方法可能是错误的。随时欢迎您提出建议。

感谢您分享宝贵的时间。

最佳答案

了解成员(member)提供者的生命周期有助于理清这一点。

成员身份提供程序的实例在应用程序启动时启动,并在 application AppDomain 的生命周期内保持事件状态,这实际上等同于应用程序生命周期。例如如果由于某种原因 AppDomain 循环,应用程序将被处理并启动一个新实例。注册成员(member)提供程序的新实例在首次使用时启动。

您需要您的成员(member)提供程序实现中实例化您的数据访问类的实例,或者您的提供程序中访问静态方法。我更喜欢使用实例。

在我看来,通过创建单例或将其存储在应用程序中来将成员(member)提供者与其数据访问分开是一种黑客行为,只会导致痛苦、悲伤、失眠和在同行中的信誉。

干杯,祝你好运。

关于c# - 为自定义 asp.net 成员提供程序提供自定义数据库功能,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2636162/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com