Skip Navigation Links
Novas Tecnologias
Ferramentas Adicionais
Ferramentas Adicionais


Dica No :
844
Assunto : ADO.NET
Titulo: Retornando o Identity em um Insert do TableAdapter

Gostou do texto ? Vote e dê sua opinião! Pontuação atual :

Translate this page now :






Adicione aos Favoritos!
BlogBlogs Rec6 Linkk Ueba Technorati Delicious DiggIt! StumbleUpon



As atualizações feitas pelo tableAdapter na base de dados já prevêem o retorno de valores identity para uma dataTable que esteja sendo atualizada.

Mas notem : Para uma dataTable que esteja sendo atualizada.

Na Web o uso de DataTables está cada vez mais raro e eventualmente precisaremos que um método insert selecionado em um objectDataSource retorne o identity de um elemento inserido.

Então vamos ver como resolver isso. Estamos falando de utilizar tableAdapters e objectDataSource, você pode ver mais detalhes em http://www.bufaloinfo.com.br/artigos/artigo26062006.asp

O insert padrão do tableAdapter não funciona para isso, pois devolve o número de registros afetados e não o identity. Então depois de criado o TableAdapter precisaremos fazer um Add Query para adicionar um novo insert.

O Wizard nos pergunta se vamos usar SQL, vamos, nos pergunta o tipo de query, insert, e finalmente nos mostra o insert padrão. Você observará que por padrão ele faz um select nos dados inseridos logo após o insert.

O problema é que se seguirmos adiante com o wizard para um insert, ele vai continuar nos devolvendo apenas as rowsAffected. Então para resolver isso fazemos um copy na instrução insert, fazemos um back e selecionamos a opção "select wich return a sigle value".

Colamos então a instrução insert (e o select que a acompanha) na janela do SQL, com pequenas mudanças :

INSERT INTO [dbo].[testeValores] ([valor]) VALUES (@valor);
SELECT SCOPE_IDENTITY()

Damos nome ao nosso método, "Inserir" e não nos preocuparemos com o fato de ele acusar um erro na geração do método.

Porém ao tentarmos configura-lo em uma página web teremos problemas, pois o objectDataSource não irá compreender este método como um insert. Para resolver isso podemos adicionar a seguinte classe em nosso projeto de negócios :

Namespace dsDadosTableAdapters

Public Class testeValoresTableAdapter

<System.ComponentModel.DataObjectMethodAttribute(System.ComponentModel.DataObjectMethodType.Insert, True)> _
Public Function Inserir2(ByVal valor As Integer) As Integer
Return (Inserir(valor))
End Function

End Class
End Namespace

Assim sendo o inserir2 utiliza nosso inserir e contém uma marca como sendo método de insert, nosso inserir pode ficar privado, explicações a mais sobre isso estão no artigo citado acima.

Por fim, para recuperar o Identity retornado utilizamos o evento Inserted do objectDataSource, algo como :

label1.text=e.AffectedRows


Nome :
E-mail:
Comentarios :
 
 
Os Últimos Comentários
data: 9/11/2017 4:11:00 PM
nome: 2323
email: wwwww@gmail.com
comentário:
232e2e2e2e

data: 10/15/2016 1:26:00 AM
nome: fZAvEmskeJkLJ
email: jimos4581rzt@hotmail.com
comentário:
X8gLWf http://www.FyLitCl7Pf7kjQdDUOLQOuaxTXbj5iNG.com

data: 10/15/2016 1:13:00 AM
nome: qQacwHwJebXRDxoIgvG
email: jimos4581rzt@hotmail.com
comentário:
4BIQjh http://www.FyLitCl7Pf7kjQdDUOLQOuaxTXbj5iNG.com

data: 8/12/2016 6:10:00 PM
nome: FuRKkXeofKkNg
email: jimos4581rt@hotmail.com
comentário:
2tsLHZ http://www.FyLitCl7Pf7kjQdDUOLQOuaxTXbj5iNG.com

 1  
Dicas
Dica do Dia
Receba Dicas Por Email
E-mail :  
 


 (help)
Aceito receber informativos do devASPNet, informações de eventos e treinamentos

Veja Quais Informativos Você Receberá

Pesquisar Dicas
Pesquisar Artigos, Dicas e Noticias

Banco de Dados
Algumas Entrevistas
Links Importantes

Búfalo Informática, Treinamento e Consultoria
R. Alvaro Alvim, 37/920 Centro - Cinelândia - Rio de Janeiro Cep: 20031-010
Tel : (21) 2262-1368 (21) 9240-5134 E-mail : Contato@bufaloinfo.com.br