2010-06-02 33 views
9

Tôi muốn di chuyển người dùng và bài đăng từ diễn đàn hiện có mà tôi đang sử dụng sang bảng thành viên ASP.NET mà không cần sử dụng CreateUser. Về cơ bản, tôi muốn duy trì userID để khi tôi di chuyển bài đăng, họ tiếp tục liên kết với đúng người dùng. Có cách nào để làm điều này hoặc tôi sẽ tốt hơn hết chỉ bằng cách sử dụng CreateUser và sau đó tìm một cách để gán lại post-by-UserIDs cho các ID mới chính xác?Làm thế nào tôi có thể tạo người dùng trong bảng thành viên ASP.NET mà không cần sử dụng CreateUser

Cảm ơn

+2

cách sao lưu và khôi phục toàn bộ bảng Người dùng (bao gồm cả ID)? – Marek

Trả lời

11

Bạn có thể tạo bảng UserProfile mà bạn có thể sử dụng để nối từ bảng Người dùng vào bảng Bài đăng của bạn. Điều này sẽ ngăn cách bạn với các thành viên của Nhà cung cấp Thành viên ASP.NET và có thể là một điểm mở rộng cho thông tin người dùng bổ sung.

Dưới đây là một thủ tục lưu trữ và chức năng liên quan mà tôi sử dụng để tạo người dùng mới và hồ sơ của họ:

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

bạn không thực sự sử dụng hàm base64_decode của bạn ở đây nhưng nó là tốt đẹp để tôi đoán. – robbie

0

gì tôi sẽ làm là tôi sẽ tạo ra một bảng liên kết giữa bảng của người dùng của bạn và bảng thành viên ASP nơi thành viên ID (địa chỉ email?) Sẽ liên quan đến UserID (Số nguyên?). Sau đó, tôi sẽ xây dựng một thói quen để tạo người dùng và điền bảng thành viên với dữ liệu người dùng theo lập trình - nó dễ dàng hơn một chút để thực hiện thông qua mã .NET.

Các vấn đề liên quan