存储过程中的Datetime值不正确,与.NET成员资格用户验证有关

存储过程中的Datetime值不正确,与.NET成员资格用户验证有关,.net,sql,sql-server,asp.net-membership,.net,Sql,Sql Server,Asp.net Membership,我在SQL Server 2008中遇到了一个奇怪的问题,其中存储过程中的一些日期时间变量得到了不正确的值1754-01-01。以下是情况的背景/背景: 我正在使用SqlMembershipProvider类开发ASP.NET web应用程序。我使用开箱即用功能将用户数据存储在数据库中,验证用户名/密码等。我们的应用程序还具有自定义电子签名实现,需要使用一些附加信息(母亲的婚前姓、毕业年份等)对用户进行身份验证 我分两步进行身份验证:首先,调用Membership.validateUserUse

我在SQL Server 2008中遇到了一个奇怪的问题,其中存储过程中的一些日期时间变量得到了不正确的值1754-01-01。以下是情况的背景/背景:

我正在使用SqlMembershipProvider类开发ASP.NET web应用程序。我使用开箱即用功能将用户数据存储在数据库中,验证用户名/密码等。我们的应用程序还具有自定义电子签名实现,需要使用一些附加信息(母亲的婚前姓、毕业年份等)对用户进行身份验证

我分两步进行身份验证:首先,调用Membership.validateUserUserUserName、password来执行所有基本检查。如果成功,那么我调用一个自定义存储过程来执行额外的身份验证。如果此附加身份验证失败,我想更新aspnet_成员数据库表以记录失败,这样用户可以在3次失败的身份验证尝试后被锁定,就像在Membership.ValidateUser中处理失败的登录一样

我做了一些研究,确定Membership.ValidateUser方法记录失败的登录,并通过调用aspnet\u Membership\u UpdateUserInfo存储过程锁定用户帐户。因此,我决定根据需要从自定义身份验证存储过程中调用此存储过程,以增加FailedPasswordAttemptCount列、IsLockedOut等

问题是,当我直接调用此存储过程时,该存储过程无法从aspnet_成员资格表中检索正确的datetime值FailedPasswordAttemptWindowsStart以正确递增FailedPasswordAttemptCount。UpdateUserInfo存储过程声明一个局部变量,并执行select语句将此日期时间值从成员资格表检索到局部变量中。它检索的日期时间值始终为1754-01-01 00:00:00.000,而不管表中存储了什么值

我试图找出为什么无法在此存储过程中从此数据库表中检索正确的datetime值。以下是我尝试过的:

在以下情况下检索不正确的datetime值:

从自定义存储过程调用aspnet\u Membership\u UpdateUserInfo,然后使用Linq到SQL从C调用该存储过程 使用Linq to SQL直接从我的应用程序调用aspnet\u Membership\u UpdateUserInfo 从我的存储过程或直接从C调用与UpdateUserInfo代码相同的自定义存储过程 在以下情况下检索正确的日期时间值:

直接从SQL Server Management Studio调用aspnet\u Membership\u UpdateUserInfo 直接从SSMS调用我的自定义存储过程,SSMS反过来调用aspnet\u Membership\u UpdateUserInfo aspnet_Membership_UpdateUserInfo通过Membership.ValidateUser方法调用 有没有人见过这样的问题,存储过程从db表中选择1754-01-01的值而不是正确的值?我真的很想了解为什么会发生这种情况,但我愿意采取一种变通办法,以某种方式完全避免这个问题。我真正需要的是一种方法,以同样的方式跟踪失败的用户名+密码和失败的自定义身份验证尝试,以便用户在多次失败后被锁定


谢谢

按回答进行标记。我使用Membership.ValidateUser对用户的密码进行初始检查,等等,然后立即调用存储过程进行初始身份验证检查和随后的UpdateUserInfo调用。在测试正确密码、不正确附加身份验证信息的用例时,我忘记了初始ValidateUser调用最终会重置数据库中的FailedPasswordAttemptCount和FailedPasswordAtterWindowsStart值。所以datetime值实际上被正确地设置为1754-01-01,我调用的存储过程没有检索错误的数据


我通过删除对特殊身份验证场景ValidateUser的调用来修复此问题,而是手动哈希用户密码并将其发送到我的自定义存储过程,以便所有身份验证都在一个步骤中进行,随后调用UpdateUserInfo过程。

标记为已应答。我使用Membership.ValidateUser对用户的密码进行初始检查,等等,然后立即调用存储过程进行初始身份验证检查和随后的UpdateUserInfo调用。在测试正确密码、不正确附加身份验证信息的用例时,我忘记了初始ValidateUser调用最终会重置数据库中的FailedPasswordAttemptCount和FailedPasswordAtterWindowsStart值。所以datetime值实际上被正确地设置为1754-01-01,即存储的pro 我调用的cedure没有检索到错误的数据


我通过删除对特殊身份验证场景的ValidateUser调用来修复此问题,而是手动哈希用户密码并将其发送到我的自定义存储过程,这样所有身份验证都在一个步骤中进行,随后调用了UpdateUserInfo过程。

我找到了答案。我没有意识到,对于我正在测试的特定用例,我认为被错误读取的日期时间值实际上只是通过初始Membership.ValidateUser方法调用重置的。我找到了答案。我没有意识到,对于我正在测试的特定用例,我认为被错误读取的日期时间值实际上只是通过初始Membership.ValidateUser方法调用被重置。