2010-06-02 10 views
9

Desidero migrare utenti e post da un forum esistente che sto utilizzando a una tabella di appartenenza ASP.NET senza utilizzare CreateUser. Fondamentalmente voglio mantenere gli userID in modo tale che quando eseguo la migrazione dei post continuino ad associarsi con gli utenti corretti. C'è un modo per fare questo o sarebbe meglio usare semplicemente CreateUser e quindi trovare un modo per riassegnare gli ID post-per-ID ai nuovi ID corretti?Come posso creare utenti in una tabella di appartenenza ASP.NET senza utilizzare CreateUser

Grazie

+2

come eseguire il backup e il ripristino dell'intera tabella Utenti (inclusi gli ID)? – Marek

risposta

11

Si potrebbe creare una tabella UserProfile che è possibile utilizzare per aderire dalla tabella utente sul tavolo Post. Ciò ti isolerà dagli interni del provider di appartenenze ASP.NET e può essere un punto di estensione per ulteriori informazioni sull'utente.

Ecco una stored procedure e funzioni associate che uso per creare nuovi utenti ed i loro profili:

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

in realtà non si usa la funzione base64_decode qui, ma è bello averlo indovinato. – robbie

0

Quello che vorrei fare è vorrei creare una tabella di collegamento tra il tavolo per l'utente e la tabella di appartenenza ASP in cui l'appartenenza ID (indirizzo email?) Sarebbe correlato a UserID (intero?). Quindi vorrei creare una routine per creare utenti e compilare la tabella di appartenenza con i dati degli utenti a livello di codice - è un po 'più facile da fare attraverso il codice .NET.

Problemi correlati