Ver Mensaje Individual
  #9 (permalink)  
Antiguo 22/01/2015, 08:57
Avatar de leodp77
leodp77
 
Fecha de Ingreso: marzo-2013
Mensajes: 39
Antigüedad: 11 años, 4 meses
Puntos: 2
Respuesta: Concurrencia en ado.net

Internamente hace lo que comentás.

Si querés usar un objeto Button en vez de un BindingNavigatorSaveItem, meté el código que te pasé en el evento Click del Button. Si querés podés ocultar el BindingNavigator, y te queda como querés.

Ahora observando tu código tenemos lo siguiente:

Código vb:
Ver original
  1. adapter.Update(dataset, "tabla2")
  2. adapter.Fill(dataset, "tabla2")

Acá debés capturar la excepción DBConcurrencyException. Quedaría así:

Código vb:
Ver original
  1. Try
  2. adapter.Update(dataset, "tabla2")
  3. adapter.Fill(dataset, "tabla2")
  4.         Catch ex As DBConcurrencyException
  5.             MessageBox.Show("Error de concurrencia")
  6.         End Try

Código vb:
Ver original
  1. Sub OnRowUpdated(ByVal sender As Object, ByVal args As OleDbRowUpdatedEventArgs)
  2. If args.RecordsAffected = 0 Then
  3. args.Row.RowError = "Violacion concurrencia optimista"
  4. args.Status = UpdateStatus.SkipCurrentRow
  5. End If
  6. End Sub
Esto está mal. El mensaje sería "0 registros afectados.".
Incluso no capturás ninguna excepción.

Al ejecutar la aplicación, y probarla, modifica la tabla, y antes de presionar el botón Guardar, modificá la base de datos (ubicada en Projecto/bin/debug o Projecto/bin/release). Porque si modificás la BD original estarías errándole de entrada en el testing.

PD: Si estás haciendo una App nueva, te diría que utilices los controles/objetos que te comenté (puro autogenerado, en 1 minuto tenés el formulario hecho). No reinventés la rueda.
__________________
"La mejor forma de obtener información correcta de los foros de internet es enviar algo incorrecto y esperar las correcciones"
-- Matthew Austern