Restore deleted ASP.net user membership

If you accidentally delete asp.net user from membership using this code Membership.DeleteUser but you have a backup of your previous database then you can restore it using the following sql.
assume :
 your current database name is MYDB and your previous database name is MYDB2.
 you must know the userid of the deleted user. you can get the userid using this code
   select * from MYDB2.dbo.aspnet_users where username like '%somename%'

USE [MYDB]
GO
/****** Object:  StoredProcedure [dbo].[RestoreMembershipDeleteUser]    Script Date: 10/19/2010 11:23:17 ******/
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO

CREATE proc [dbo].[RestoreMembershipDeleteUser](@userid uniqueidentifier)
as
begin

if not exists (select * from MYDB2.dbo.aspnet_users where userid=@userid) 
begin
    print 'userid not found in prev aspnet_users'
    return 0
end
if not exists (select * from MYDB2.dbo.aspnet_membership where userid=@userid) 
begin
    print 'userid not found in prev aspnet_membership'
    return 0
end
--get information from backup database
--MYDB2 is the backup database
declare @ApplicationId uniqueidentifier
declare @UserName nvarchar(256)
declare @Email nvarchar(256)
declare @CreateDate datetime
declare @Password   nvarchar(128)
declare @PasswordSalt  nvarchar(128)
declare @IsApproved bit
declare @IsLockedOut bit
declare @LastLoginDate datetime
declare @FailedPasswordAttemptCount int
declare @FailedPasswordAttemptWindowStart datetime
declare @FailedPasswordAnswerAttemptCount int
declare @FailedPasswordAnswerAttemptWindowStart datetime
declare @LastPasswordChangedDate datetime
declare @LastLockoutDate datetime
declare @LastActivityDate datetime

select @UserName = username from MYDB2.dbo.aspnet_users where userid=@userid
select
    @ApplicationId = Applicationid,
    @Email = email,    
    @CreateDate =CreateDate,
    @Password=Password,
    @PasswordSalt=PasswordSalt,
    @IsApproved = IsApproved,
    @IsLockedOut = IsLockedOut,
    @LastLoginDate = LastLoginDate,
    @LastPasswordChangedDate = LastPasswordChangedDate,
    @LastLockoutDate = LastLockoutDate,
    @FailedPasswordAttemptCount = FailedPasswordAttemptCount,
    @FailedPasswordAttemptWindowStart = FailedPasswordAttemptWindowStart,
    @FailedPasswordAnswerAttemptCount = FailedPasswordAnswerAttemptCount,
    @FailedPasswordAnswerAttemptWindowStart = FailedPasswordAnswerAttemptWindowStart
from MYDB2.dbo.aspnet_membership
where userid=@userid

declare @TranStarted   bit

set @TranStarted = 0
if( @@TRANCOUNT = 0 )
begin
  begin transaction       
  set @TranStarted = 1
end
else
    set @TranStarted = 0
   
--delete existing data   
delete from aspnet_Membership WHERE UserID = @userid
if( @@ERROR <> 0 )
begin     
    print 'error delete aspnet_Membership'
    goto Cleanup
end 
 
delete from aspnet_Users WHERE UserID = @userid
if( @@ERROR <> 0 )
begin     
    print 'error delete aspnet_Users'
    goto Cleanup
end  

declare @ReturnValue int
EXEC @ReturnValue = dbo.aspnet_Users_CreateUser @ApplicationId, @UserName, 0, @CreateDate, @UserId OUTPUT
if( @@ERROR <> 0 or @ReturnValue = -1)
begin     
    print 'error exec aspnet_Users_CreateUser'
    goto Cleanup
end  

if not exists (select * from aspnet_Membership where userid=@userid)
begin
 INSERT INTO aspnet_Membership
                ( ApplicationId,
                  UserId,
                  Password,
                  PasswordSalt,
                  Email,
                  LoweredEmail,
                  IsApproved,
                  IsLockedOut,
                  CreateDate,
                  LastLoginDate,
                  LastPasswordChangedDate,
                  LastLockoutDate,
                  FailedPasswordAttemptCount,
                  FailedPasswordAttemptWindowStart,
                  FailedPasswordAnswerAttemptCount,
                  FailedPasswordAnswerAttemptWindowStart
                  )
    values
        (@applicationid,
        @userid,
        @Password,
        @PasswordSalt,
        @email,
        lower(@email),
        @IsApproved,
        @IsLockedOut,
        @CreateDate,
        @LastLoginDate,
        @LastPasswordChangedDate,
        @LastLockoutDate,
        @FailedPasswordAttemptCount,
        @FailedPasswordAttemptWindowStart,
        @FailedPasswordAnswerAttemptCount,
        @FailedPasswordAnswerAttemptWindowStart)
    if( @@ERROR <> 0 )
    begin     
        print 'error insert aspnet_Membership'
        goto Cleanup
    end        
end

if( @TranStarted = 1 )
begin
    set @TranStarted = 0
    COMMIT TRANSACTION
end

    return 0
Cleanup:

    IF( @TranStarted = 1 )
    BEGIN
        SET @TranStarted = 0
        print 'rollback'
        ROLLBACK TRANSACTION
    END

    RETURN -1
end

0 comments: