2010-06-02 51 views
9

我想將現有論壇中的用戶和帖子從不使用CreateUser的情況下遷移到ASP.NET成員資格表中。基本上我想維護用戶ID,以便在遷移帖子時,他們繼續與正確的用戶關聯。有沒有辦法做到這一點,或者我最好只使用CreateUser,然後找到一種方法來重新分配正確的新ID的後用戶ID?如何在不使用CreateUser的情況下在ASP.NET成員資格表中創建用戶

感謝

+2

如何備份和恢復整個Users表(包括ID)? – Marek 2010-06-02 14:44:28

回答

11

你可以創建一個可以使用來自用戶表加入到後您的表中的用戶配置表。這將使您與ASP.NET成員提供程序的內部隔離,並且可以成爲其他用戶信息的擴展點。

下面是一個存儲過程,我用它來創建新的用戶和他們的個人資料相關聯的功能:

CREATE PROCEDURE [dbo].[CreateUser] 
    @UserName nvarchar(256) 
, @ClearTextPassword nvarchar(128) 
, @Email nvarchar(256) 
, @PostingID uniqueidentifier 

AS 

BEGIN 

DECLARE @ApplicationName nvarchar(256) 
DECLARE @PasswordFormat int 
DECLARE @UnencodedSalt uniqueidentifier 
DECLARE @Password nvarchar(128) 
DECLARE @PasswordSalt nvarchar(128) 
DECLARE @Now DATETIME 
DECLARE @UniqueEmail int 

SET @ApplicationName = 'YOUR_APPLICATION_NAME' 
SET @PasswordFormat = 1 
SET @UnencodedSalt = NEWID() 
SET @PasswordSalt = dbo.base64_encode(@UnencodedSalt) 
SET @Password = dbo.base64_encode(HASHBYTES('SHA1', 
    CAST(@UnencodedSalt as varbinary(MAX)) 
    + CAST(@ClearTextPassword AS varbinary(MAX)))) 
SET @Now = getutcdate() 
SET @UniqueEmail = 1 


BEGIN TRANSACTION 

DECLARE @UserId uniqueidentifier 

EXECUTE [dbo].[aspnet_Membership_CreateUser] 
    @ApplicationName 
    ,@UserName 
    ,@Password 
    ,@PasswordSalt 
    ,@Email 
    ,NULL 
    ,NULL 
    ,1 
    ,@Now 
    ,@Now 
    ,@UniqueEmail 
    ,@PasswordFormat 
    ,@UserId OUTPUT 

INSERT INTO [dbo].[UserProfile] 
(
[UserID] 
,[PostingID] 
) 
VALUES 
(
@UserId 
,@PostingID 
) 

COMMIT 

CREATE FUNCTION [dbo].[base64_decode] 
(@base64_text VARCHAR(max)) 
RETURNS VARBINARY(max) 

WITH SCHEMABINDING, RETURNS NULL ON NULL INPUT 

BEGIN 

DECLARE @x XML; SET @x = @base64_text 
RETURN @x.value('(/)[1]', 'VARBINARY(max)') 

END 

CREATE FUNCTION [dbo].[base64_encode] 
(@data VARBINARY(max)) 
RETURNS VARCHAR(max) 

WITH SCHEMABINDING, RETURNS NULL ON NULL INPUT 

BEGIN 

RETURN (

SELECT [text()] = @data 
FOR XML PATH('') 

) 
END 
+0

你實際上並沒有在這裏使用你的base64_decode函數,但很高興我猜。 – robbie 2011-02-25 04:52:43

0

我會做的就是我會創造你的用戶的表和ASP成員關係表,其中的成員之間的聯繫表ID(電子郵件地址?)將與UserID(Integer?)相關。然後,我將創建一個例程來創建用戶並以編程方式用用戶數據填充成員表 - 通過.NET代碼執行起來要容易一些。

相關問題