程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> .NET網頁編程 >> .NET實例教程 >> Asp.net Membership的BUG:存儲過程錯誤導致無法更新用戶最近活動時間

Asp.net Membership的BUG:存儲過程錯誤導致無法更新用戶最近活動時間

編輯:.NET實例教程

用ASP.Net2.0做項目,發現membership的用戶過段時間就離線了,而我一直在操作啊,郁悶,發現數據表中的最後活動時間字段沒有更 新,最後google了一下,發現這是一個bug,看看存儲過程,的確啊,@UserID變量沒有值啊?!修正了一下,果然工作正常。這個問題到目前都沒 有官方的解決。

相關網址:
http://forums.ASP.Net/thread/1299317.ASPx
http://forums.microsoft.com/MSDN/ShowPost.ASPx?PostID=430091&SiteID=1

    以下是修正後的存儲過程:



CREATE PROCEDURE dbo.ASPnet_Membership_GetUserByName
    @ApplicationName      nvarchar(256),
    @UserName             nvarchar(256),
    @CurrentTimeUtc       datetime,
    @UpdateLastActivity   bit = 0
AS
BEGIN
    DECLARE @UserId uniqueidentifIEr

    IF (@UpdateLastActivity = 1)
    BEGIN

-- Dadi, 11.08.2006
-- Am adaugat eu cda 'select' de mai jos. Fara ea nu se poate executa cda  'update' care actualizeaza LastActivityTime.
--Pb. provine din faptul ca variabila @UserId nu era niciunde initializata

        SELECT TOP 1 @userId=u.UserId
        FROM    dbo.aspnet_Applications a, dbo.aspnet_Users u, dbo.ASPnet_Membership m
        WHERE    LOWER(@ApplicationName) = a.LoweredApplicationName AND
                u.ApplicationId = a.ApplicationId    AND     
   LOWER(@UserName) = u.LoweredUserName AND u.UserId = m.UserId
-------------


        SELECT TOP 1 m.Email, m.PassWordQuestion, m.Comment, m.IsApproved,
                m.CreateDate, m.LastLoginDate, @CurrentTimeUtc, m.LastPassWordChangedDate,
                u.UserId, m.IsLockedOut,m.LastLockoutDate
        FROM    dbo.aspnet_Applications a, dbo.aspnet_Users u, dbo.ASPnet_Membership m
        WHERE    LOWER(@ApplicationName) = a.LoweredApplicationName AND
                u.ApplicationId = a.ApplicationId    AND
                LOWER(@UserName) = u.LoweredUserName AND u.UserId = m.UserId

        IF (@@ROWCOUNT = 0) -- Username not found
            RETURN -1

        UPDATE   dbo.ASPnet_Users
        SET      LastActivityDate = @CurrentTimeUtc
        WHERE    @UserId = UserId
    END
    ELSE
    BEGIN
        SELECT TOP 1 m.Email, m.PassWordQuestion, m.Comment, m.IsApproved,
                m.CreateDate, m.LastLoginDate, u.LastActivityDate, m.LastPassWordChangedDate,
                u.UserId, m.IsLockedOut,m.LastLockoutDate
        FROM    dbo.aspnet_Applications a, dbo.aspnet_Users u, dbo.ASPnet_Membership m
        WHERE    LOWER(@ApplicationName) = a.LoweredApplicationName AND
                u.ApplicationId = a.ApplicationId    AND
                LOWER(@UserName) = u.LoweredUserName AND u.UserId = m.UserId

        IF (@@ROWCOUNT = 0) -- Username not found
            RETURN -1
    END

    RETURN 0
END
GO
 
  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved