2012-04-26 87 views
0

我在我的web应用程序中使用了ASP.NET成员资格,并且我使用了GetAllUsers方法来列出用户,但是此方法返回按UserName排序的列表,我想要命令它再见CrateDate我资助存储过程中我的SQL,但我不知道如何修改或编辑:( 这是我GetAllUsers存储过程的代码:如何修改ASP.NET MEmbership存储过程

USE [MoftakiDB] 
GO 
/****** Object: StoredProcedure [dbo].[aspnet_Membership_GetAllUsers] Script Date: 04/26/2012 14:24:14 ******/ 
SET ANSI_NULLS ON 
GO 
SET QUOTED_IDENTIFIER OFF 
GO 
ALTER PROCEDURE [dbo].[aspnet_Membership_GetAllUsers] 
    @ApplicationName  nvarchar(256), 
    @PageIndex    int, 
    @PageSize    int 
AS 
BEGIN 
    DECLARE @ApplicationId uniqueidentifier 
    SELECT @ApplicationId = NULL 
    SELECT @ApplicationId = ApplicationId FROM dbo.aspnet_Applications WHERE LOWER(@ApplicationName) = LoweredApplicationName 
    IF (@ApplicationId IS NULL) 
     RETURN 0 


    -- Set the page bounds 
    DECLARE @PageLowerBound int 
    DECLARE @PageUpperBound int 
    DECLARE @TotalRecords int 
    SET @PageLowerBound = @PageSize * @PageIndex 
    SET @PageUpperBound = @PageSize - 1 + @PageLowerBound 

    -- Create a temp table TO store the select results 
    CREATE TABLE #PageIndexForUsers 
    (
     IndexId int IDENTITY (0, 1) NOT NULL, 
     UserId uniqueidentifier 
    ) 

    -- Insert into our temp table 
    INSERT INTO #PageIndexForUsers (UserId) 
    SELECT u.UserId 
    FROM dbo.aspnet_Membership m, dbo.aspnet_Users u 
    WHERE u.ApplicationId = @ApplicationId AND u.UserId = m.UserId 
    ORDER BY u.UserName 

    SELECT @TotalRecords = @@ROWCOUNT 

    SELECT u.UserName, 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_Membership m, dbo.aspnet_Users u, #PageIndexForUsers p 
    WHERE u.UserId = p.UserId AND u.UserId = m.UserId AND 
      p.IndexId >= @PageLowerBound AND p.IndexId <= @PageUpperBound 
    ORDER BY u.UserName 
    RETURN @TotalRecords 
END 
+0

我建议现在改变sp,但最好让你的代码从你的代码中调用,以获得你想要的。你永远不知道其他人认为你可能会有什么影响,或者在任何更新中,这个词可能会不同 – Aristos 2012-04-26 10:40:01

回答

1

这是一个普通的存储过程,这样你就可以ALTER PROCEDURE修改它就像用任何其他SP

但是我会建议反对它SP这是成员的一部分IP提供商,你不知道代码所做的假设。改变顺序可能会破坏会员制度的某些关键部分。

最好是让所有的用户和使用linq OrderBy运算符重新排列存储器中返回的序列。因为集合(MembershipUserCollection)仅实施非通用IEnumerable接口

var users = Membership.GetAllUsers().Cast<MembershipUser>() 
      .OrderBy(mu => mu.CreationDate); 

演员是必需的。

+0

我用这个,但我得到错误,VS可以不知道OrderBy: - ?我有和.OrderBy – 2012-04-26 10:43:49

+0

下的红线,感谢真正的语法:var users = Membership.GetAllUsers()。Cast () .OrderBy(mu => mu.CreationDate); – 2012-04-26 10:45:00