Hola grupo
Estoy haciendo una aplicación con
VB.NET con una DB Oracle y me acabo de encontrar con el siguiente problema al
utilizar transacciones al momento de actualizar la DB
Supongamos que el
usuario realiza modificaciones sobre dos tablas (dt1 y dt2) agregando,
modificando y eliminando registros
Al momento de hacer clic sobre un botón para
actualizar los datos (ver el siguiente codigo) se produce una excepción al
actualizar la 2da tabla.
El problema que tengo es que tr.Rollback() no
restablece la propiedad RowState de cada fila de la primer tabla cuya
actualización fue exitosa y ahora todas sus filas tiene la propiedad RowState en
Unchanged.
Con lo cual ahora tengo una diferencia de versiones
de los datos entre la aplicación la base de datos. Buscando en internet encontré
varias respuestas a este problema pero ninguna válida.Por EJ.
usar dt1.RejectChange() lo cual no funciona porque
el médoto Update() ya cambió el estado de todas las fijas a
Unchanged
otra respuesta que encontré es usar
SetAdded() o SetModified() para restablecer a mano las
propiedades de cada fila, lo cual es imposible ya que no tengo manera de saber
cuales fueron las fijas que fueron modificadas, agregadas o eliminadas ya
que todas tienen el valor Unchanged
¿Qué es lo que se debe hacer en estos
casos?
Saludos y gracias
Martín
'****CODIGO DE EJEMPLO*****
Dim tr As
OracleTransaction = cn.BeginTransaction
Try
da1.Update(dt1)
da2.Update(dt2) 'Esta
linea provoca una excepción al actualizar
tr.Commit()
Catch ex As Exception
tr.Rollback()
End Try