Skip Navigation Links
Novas Tecnologias
Ferramentas Adicionais
Ferramentas Adicionais


Dica No :
611
Assunto : ADO.NET
Titulo: Controlando as atualizações feitas por um Adapter

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



Quando utilizamos o adapter para fazer as atualizações de um dataset na base de dados, utilizamos o método Update do adapter. Esse método vai realizar no banco todas as deleções, inserções e atualizações.

Se for encontrado algum erro durante as atualizações feitas pelo adapter, ele já terá realizado no banco parte das atualizações e irá parar pela metade.

Porém existem casos em que não desejamos que apenas parte das atualizações sejam realizadas. Existem casos nos quais desejamos realizar tudo ou cancelar tudo, ou seja, uma transação.

Mas como fazer isso com um adapter ?

Basta iniciar a transação e configurar cada um dos commands do adapter com a transação, desta forma, ao fazer o update, poderemos testar se algum erro ocorreu e cancelar ou fazer commit.

Veja um exemplo :

Dim tr As OleDb.OleDbTransaction
CN.BeginTransaction(IsolationLevel.ReadCommitted)

DA.UpdateCommand.Transaction = tr
DA.DeleteCommand.Transaction = tr
DA.InsertCommand.Transaction = tr

Try
DA.Update(ds1)
tr.Commit()
Catch er As Exception
tr.Rollback()
End Try

Mas existe nisso um pequeno problema que precisamos contornar. Quando o adapter faz o update ele reseta o status dos registros no dataset. O rollback feito na transação irá desfazer as execuções no banco, mas não as alterações de status no dataset, consequentemente perderemos o controle do que estava alterado.

Para contornar isso podemos usar o GetChanges e um dataset secundário para fazer a atualização. O GetChanges gera uma cópia do dataset com todos os registros alterados. Então fazemos o update sobre a cópia. Se a transação falhar, descartamos a cópia e pelo original ainda sabemos quais registros foram alterados. Se, porém, a transação funcionar, resetamos os status dos registros do dataset original.

Veja como fica :

Dim tr As OleDb.OleDbTransaction
Dim dsAlterados As DataSet

dsAlterados = ds1.customers.getchanges

CN.BeginTransaction(IsolationLevel.ReadCommitted)

DA.UpdateCommand.Transaction = tr
DA.DeleteCommand.Transaction = tr
DA.InsertCommand.Transaction = tr

Try
DA.Update(dsAlterados)
tr.Commit()
ds1.acceptchanges()
Catch er As Exception
tr.Rollback()
End Try

Observe como o acceptChanges após o commit faz com que os status do dataset original sejam resetados, pois tudo foi aceito pelo banco.

Vale lembrar ainda que o tratamento de erros no update muda drasticamente de acordo com o valor da propriedade ContinueUpdateonError, que determina se o adapter vai parar a atualização no primeiro erro ou vai executar todos os corretos e só depois parar. Mas no caso de uma transação, já que tudo só pode ser feito em conjunto o único valor que faz sentido para essa propriedade é False, e o código acima já foi feito para este caso.


Obs : A Búfalo Informática em conjunto com o MSDN Brasil e os grupos de usuários .NET do Rio de Janeiro estão realizando o Microsoft Developers Day - DevDays, que vai ocorrer nos dias 11 e 12 de fevereiro de 2004, por apenas R$ 30,00 por pessoa para os 2 dias de evento. Não perca essa oportunidade, Participe ! Veja mais detalhes em http://www.bufaloinfo.com.br/devdaysrj/cartaleo.asp

Nome :
E-mail:
Comentarios :
 
 
Os Últimos Comentários
Nenhum comentário foi realizado ainda. Seja o primeiro !
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