none
SQLTransaction RRS feed

  • Pergunta

  •  

    Daew pessoal,

    sou novíssimo em C# e estou com algumas dúvidas quanto a inserção de dados.

    Estou tentando fazer uma tela simples de cadastro de usuários, porém estou usando um banco de dados antigo e não quero modificar o mesmo.

     

    Tenho 2 tabelas que me interessam neste banco: aspnet_Users e aspnet_Membership. Na 1ª guardo o login do usuário e outras informações menos importantes, já na 2ª guardo a senha do mesmo.

    A PK da aspnet_Users é um uniqueidentifier, e aí é que está a minha dúvida.

    Quando cadastro um novo usuário tenho que jogar o login na aspnet_Users e a senha na aspnet_Membership.

     

    Consigo fazer a inserção do login na Users mas não consigo recuperar a PK para fazer a inserção da senha na Membership.

     

    sei que tenho que fazer tudo isso em uma transaction para poder dar rollback caso algo saia errado.

    Alguém teria alguma luz quanto a esta questão?

    Agradeço desde já.

    terça-feira, 2 de setembro de 2008 02:49

Respostas

  • Olá Ander,

     

    Pela descrição do seu problema, é provavel que a aplicação que utiliza esse banco de dados use um Membership Provider qualquer, que você poderia utilizar para criar/alterar/apagar os usuários, e você não precisaria se preocupar com tabelas e coisas assim... Seria apenas uma questão de chamar os métodos do Membership Provider.

     

    De qualquer forma, respondendo sua pergunta:

     

    Se você está conseguindo inserir o registro na aspnet_Users, então "alguém" já está gerando o unique identifier da coluna que é PK dessa tabela.

     

    Se você preferir gerar através da sua aplicação (antes de enviar para o banco de dados), basta utilizar a classe Guid:

     

    Code Snippet

    Guid userId = Guid.NewGuid();

    SqlParameter pUserId = new SqlParameter("@UserId", userId);

    string cmd = "INSERT INTO aspnet_Users(UserId, ...) VALUES(@UserId, ...)";

    // ...

     

     

    Se preferir gerar pelo SQL Server, basta criar uma variável, guardar o valor gerado, e ler via DataReader:

     

    Code Snippet

    DECLARE @userId uniqueidentifier

    SET @UserId = NEWID()

    INSERT INTO aspnet_Users(UserId, ...) VALUES(@UserId, ...)

     

     

     

    Abraços,
    Caio Proiete

    terça-feira, 2 de setembro de 2008 11:27
    Moderador

Todas as Respostas

  • Olá Ander,

     

    Pela descrição do seu problema, é provavel que a aplicação que utiliza esse banco de dados use um Membership Provider qualquer, que você poderia utilizar para criar/alterar/apagar os usuários, e você não precisaria se preocupar com tabelas e coisas assim... Seria apenas uma questão de chamar os métodos do Membership Provider.

     

    De qualquer forma, respondendo sua pergunta:

     

    Se você está conseguindo inserir o registro na aspnet_Users, então "alguém" já está gerando o unique identifier da coluna que é PK dessa tabela.

     

    Se você preferir gerar através da sua aplicação (antes de enviar para o banco de dados), basta utilizar a classe Guid:

     

    Code Snippet

    Guid userId = Guid.NewGuid();

    SqlParameter pUserId = new SqlParameter("@UserId", userId);

    string cmd = "INSERT INTO aspnet_Users(UserId, ...) VALUES(@UserId, ...)";

    // ...

     

     

    Se preferir gerar pelo SQL Server, basta criar uma variável, guardar o valor gerado, e ler via DataReader:

     

    Code Snippet

    DECLARE @userId uniqueidentifier

    SET @UserId = NEWID()

    INSERT INTO aspnet_Users(UserId, ...) VALUES(@UserId, ...)

     

     

     

    Abraços,
    Caio Proiete

    terça-feira, 2 de setembro de 2008 11:27
    Moderador
  • Caio,

    muito obrigado,

    esta a dias quebrando cabeça por isso.

    [ ]'s

    quinta-feira, 4 de setembro de 2008 11:54