0

i used ASP.NET Membership in my webapplication and i used GetAllUsers Method for listing of users, but this method returns list ordered by UserName i want to order it bye CrateDate i fund the stored procedure in my sql but i dont know how to modify or edit it :( this is the code of my GetAllUsers stored procedure :

    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
A Programmer
  • 625
  • 8
  • 30
  • I suggest to now change the sp, but better make your ones and call it your way from your code to get what you wish for. You never know what other thinks you may affect, or in any update may this word different. – Aristos Apr 26 '12 at 10:40

1 Answers1

1

It's an ordinary stored procedure, so you can modify it with ALTER PROCEDURE just as with any other SP.

However I would advise against it. That SP is part of the membership provider and you have no idea of the assumptions made by the code. Changing the ordering might break some critical part of the membership system.

It is better to get all the users and the use the linq OrderBy operator to reorder the returned sequence in memory.

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

The cast is required because the collection (MembershipUserCollection) only implement the non-generic IEnumerable interface.

Anders Abel
  • 67,989
  • 17
  • 150
  • 217