Documenti di Didattica
Documenti di Professioni
Documenti di Cultura
NET
Download
Fontes da aplicao exemplo
108 KB
O que acontece se na hora que voc tentar aplicar a sua alterao no banco de dados, e algum j tenha modificado esse
mesmo registro? Tecnicamente falando, voc tem um conflito de dados. Como tratar esse conflito estritamente um
problema especfico de cada aplicao, que pode ser bem resumido em trs opes: First-win (A primeira alterao que
prevalece), Last-win (A ltima alterao que prevalece) e Ask-the-user (O usurio decide). Vejamos cada uma em detalhes,
lembrando que a abordagem que daremos aqui a Optimistic Concurrency, a nica que aceita pelo ADO.NET.
First-win: O conflito resolvido silenciosamente e automaticamente removendo a ltima alterao. Para implementar esse
mtodo, voc simplesmente define a propriedade ContinueUpdateError do DataAdapter como True. Sendo assim, nenhuma
exceo ser disparada quando ocorrer esse tipo de situao. A informao sobre a exceo de cada linha que a causou
armazenadas na propriedade RowError enquanto o processo de atualizao continua a ocorrer para as demais linhas.
Last-win: Suas alteraes so aplicadas independentes do status da linha. Para implementar esse modelo, voc deve
simplesmente se assegurar que o seu comando SQL no seja muito restritivo, ou seja, se voc criar um comando SQL que
atualize ou apague uma linha, pesquisando pela sua chave primria, nenhum conflito existir.
Ask-the-user: Voc pode dar a liberdade para o usurio escolher o que fazer. Basicamente escolher entre as duas opes
anteriores. Por default um conflito disparar uma DbConcurrencyException, a no ser que voc tenha definido a propriedade
ContinueUpdateError como True. A propriedade Row da classe DbConcurrencyException, retorna a referncia da linha que
causou a exceo e ter acesso ao valor original e atual da linha para lhe ajudar a dar mais informaes para que o usurio
possa fazer sua escolha.
Planejando seu cdigo para tratar concorrncia de dados.
Vamos fazer um exemplo onde poderemos dar ao usurio a opo de escolha de como ser o tratamento de concorrncia.
Crie um novo projeto Windows Application, chame-o de ADOConcurrency e adicione os controles de acordo com a imagem e
descrio abaixo:
Object
Propriedade
Valor
Textbox
Name
txtPrimeiroNome
Text
""
Name
txtUltimoNome
Text
""
Name
txtCargo
Textbox
Textbox
Object
Textbox
Button
Button
Label
Form
GroupBox
RadioButton
RadioButton
RadioButton
Button
Propriedade
Valor
Text
""
Name
txtNotas
MultiLine
True
Text
""
Name
btnVoltar
Text
<
Name
btnAvancar
Text
>
Name
lblPosicao
Backcolor
Info
Text
""
TextAlign
MiddleCenter
Name
FrmFuncionarios
Text
Funcionarios
Startup Position
CenterScreen
FormBorderStyle
FixedSingle
MaximizeBox
False
Name
gbTrataConcor
Text
Tratamento de concorrncia
Name
rbFirstWin
Text
First-win
Name
rbLastWin
Text
Last-Win
Name
rbAskUser
Text
Ask-user
Name
btnUpdate
Text
Update
V em Server Explorer e crie uma nova conexo com o banco de dados Northwind. Depois arraste a tabela de Funcionrios
para o formulrio. Veja que automaticamente ser criado um objeto OleDbConnection1 e OleDbDataAdapter1. Agora, clique
com o boto direito em OleDbDataAdapter1 e escolha a opo Generate DataSet. Defina o nome do DataSet como
dsNorthwind e clique em OK. Sua barra de componentes dever ficar assim:
FirstWin = 0
LastWin = 1
Askuser = 2
End Enum
'
Dim TipoT As TipoTratamento = TipoTratamento.LastWin
No evento Load iremos preencher o DataSet, vincular os controles e definir um Event Handler para atulaizao do Label com
a posio do registro.
'
'Recalcula os status dos botes de navegao
'
If RecordCount = Position Then
btnAvancar.Enabled = False
Else
btnAvancar.Enabled = True
End If
If Position = 1 Then
btnVoltar.Enabled = False
Else
btnVoltar.Enabled = True
End If
'
'Atualiza o label que mostra a posio atual
'
AtualizaLabel()
'
End Sub
Temos tambm a rotina que atualiza o Label com a informao da posio no registro:
Concluso:
Vimos um exemplo bem simples, mas que possui a essncia do esquema de tratamento de concorrncia com ADO.NET. Para
qualquer dvida ou comentrio estarei disposio. At a prxima.
Leonardo Bruno
lblima_net@hotmail.com
Currculo: Most Valuable Professional 2004 [Visual Basic .NET]. Trabalha com desenvolvimento de aplicaes .NET desde
2001. Ministra cursos sobre a plataforma .NET, consultor de tecnologia e desenvolvedor de sistemas na RR Consultoria e
Sistemas (Fortaleza - CE). Atualmente est dedicado ao desenvolvimento de um sistema ERP utilizando a plataforma .NET
Incio da pgina