Usuário com melhor resposta
Recuperar chave primária (código) do último registro adicionado

Pergunta
-
Olá, pessoal. A dúvida é bem besta, mas vou contar a situação direitinho para que possam, talvez, se quiserem, ajudar-me. Bem, estou fazendo uma aplicação que consiste basicamente no cadastro de pessoas. Para isso criei uma tabela Membro e uma tabela Endereco (só citei essas duas, porque a dúvida é entre elas).
No meu aplicativo a tabela Endereco só existe "desmembrada" da tabela Membro, por uma questão de organização, e não de desempenho ou normalização. Esclarecido esse ponto, eu criei uma interface para o usuário digitar os dados do membro, inclusive o endereço; guardei esses dados em objetos dos tipos Membro e Endereco com atributos que foram espelhados do banco. Então, antes de adicionar um membro eu tenho de adicionar o Endereço, pegar a chave primária desse endereço e jogar dentro do INSERT do membro. Deu pra entender? Se sim, como fazer isso?
PS.: poderia fazer pegando a quantidade de registros através de um SELECT na tabela Endereco? Acho que sim. Mas fora essa gambiarra, existe outro método?
Grato desde já.
Respostas
-
Olá Danilo,
Existem algumas formas para fazer isso:
1) Utilizar uma Stored Procedure que receba os dados do Membro e do Endereço. Na Stored Procedure você pode:
1a) Inserir na tabela Membro, recuperar o código através da variável @@identity ou da função scope_identity() e utilizá-lo no insert da tabela de Endereço;
1b) Inserir na tabela Membro utilizando a cláusula OUTPUT do comando INSERT que permite a você retornar um dado após o insert. No seu caso retornar o ID do Membro para utilizá-lo depois;
2) Fazer a mesma lógica descrita anteriormente no código, garantindo que irá utilizar a mesma conexão e se possível a mesma transação (objeto com a interface IDbTransaction);
3) Utilizar o Entity Framework que resolveria tudo isso pra você.
[]'s
Jorge Rua http://jtressino.spaces.live.com http://twitter.com/jtressino- Sugerido como Resposta Jorge Rua segunda-feira, 8 de fevereiro de 2010 10:19
- Marcado como Resposta Danilo Kleber segunda-feira, 8 de fevereiro de 2010 18:55
Todas as Respostas
-
Olá Danilo,
Existem algumas formas para fazer isso:
1) Utilizar uma Stored Procedure que receba os dados do Membro e do Endereço. Na Stored Procedure você pode:
1a) Inserir na tabela Membro, recuperar o código através da variável @@identity ou da função scope_identity() e utilizá-lo no insert da tabela de Endereço;
1b) Inserir na tabela Membro utilizando a cláusula OUTPUT do comando INSERT que permite a você retornar um dado após o insert. No seu caso retornar o ID do Membro para utilizá-lo depois;
2) Fazer a mesma lógica descrita anteriormente no código, garantindo que irá utilizar a mesma conexão e se possível a mesma transação (objeto com a interface IDbTransaction);
3) Utilizar o Entity Framework que resolveria tudo isso pra você.
[]'s
Jorge Rua http://jtressino.spaces.live.com http://twitter.com/jtressino- Sugerido como Resposta Jorge Rua segunda-feira, 8 de fevereiro de 2010 10:19
- Marcado como Resposta Danilo Kleber segunda-feira, 8 de fevereiro de 2010 18:55
-
-
Olá Danilo,
Existem algumas formas para fazer isso:
1) Utilizar uma Stored Procedure que receba os dados do Membro e do Endereço. Na Stored Procedure você pode:
1a) Inserir na tabela Membro, recuperar o código através da variável @@identity ou da função scope_identity() e utilizá-lo no insert da tabela de Endereço;
1b) Inserir na tabela Membro utilizando a cláusula OUTPUT do comando INSERT que permite a você retornar um dado após o insert. No seu caso retornar o ID do Membro para utilizá-lo depois;
2) Fazer a mesma lógica descrita anteriormente no código, garantindo que irá utilizar a mesma conexão e se possível a mesma transação (objeto com a interface IDbTransaction);
3) Utilizar o Entity Framework que resolveria tudo isso pra você.
[]'s
Jorge Rua http://jtressino.spaces.live.com http://twitter.com/jtressinoJorge, boa tarde,
como faço para usar o Passo 3??
O site que estou fazendo usa EF, e é novo pra mim, pois eu usava o velho CommandText @@IDENTITY, como seria isso com EF?
Att.
-
Olá Leonardo,
O EF é bastante diferente das abordagens com ADO.Net puro.
Ele é uma ferramenta de mapeamento objeto relacional, e não vai exigir que vc escreva queries em SQL.
Qual seu conhecimento sobre EF?
Aqui neste post existe alguns links úteis sobre o Entity Framework: http://social.msdn.microsoft.com/Forums/pt-BR/adoptpt/thread/49983a46-1acb-45ad-b68d-d7936dc7585b
No caso, logo depois que vc executa o comando SaveChanges, o EF automaticamente atualiza os IDs para vc. Sem vc se preocupar.
Aqui tem um exemplo sobre o uso de Entity Framework: http://ferhenriquef.com/2011/11/26/construindo-sua-camada-de-acesso-a-dados-com-o-entity-framework-4-1/
Espero que ajude.
[]s!
Fernando Henrique Inocêncio Borba Ferreira
while(alive){ this.WriteCode(); }
Blog: http://ferhenriquef.com/
Twitter: @ferhenrique
Entity Framework - Brasil: https://www.facebook.com/EntityFrameworkBrasil