Hola a todos:
Ataco una base de datos SQL Server desde ADO .NET el problema se presenta
con los campos Identidad a los que les tengo establecido un incremento
automático de esta identidad (autonumeración).
En este caso
- Si borro el último registro y
- Reago el data set (entrando y saliendo de la aplicación, por ejemplo)
-Luego creo un registro nuevo registro,
La capa desconectada, osea el data set entiende que el campo identidad es
uno menos que lo que es en realidad puesto que la base de datos ya creo ese
registro y crea el siguiente.
Ejemplo
ID DATO
1 dato 1
2 dato 2
3 dato 3 borramos este dato
ID DATO
1 dato 1
2 dato 2
Releemos el data set, por ejemplo cerramos la aplicación y la volvemos a
abrir todo parece estar bien
ID DATO
1 dato 1
2 dato 2 creamos un nuevo registro
Para el data set es el "3" "dato Nuevo" sin embargo al hacer el update del
DataAdapter devuelve el registro "4" "DatoNuevo"
EL PROBLEMA ES QUE LLEGO A TENER 4 REGISTROS CUANDO EJECUTO EL MERGE ENTRE
LOS DOS DATA SET EL QUE CREA CON EL REGISTRO 3 EL DsPed Y EL QUE DEVUELVE EL
SQL EN ObjCambios con el registro 4
¿Cómo solucionar esto?
Este sería el código que utilizo para la actualización
Private Sub ActualizaTodos()
Dim ObjCambios As dspedidos 'Aloja los cambios
producidos en el data set
Me.BindingContext(Dsped).EndCurrentEdit() 'Terminamos con las ediciones
que se puedan estar realizando
ObjCambios = CType(Dsped.GetChanges, dspedidos)
If (Not (ObjCambios) Is Nothing) Then
Try
ActualizaFuenteDeDatosTodos(ObjCambios)
Dsped.Merge(ObjCambios)
Dsped.AcceptChanges()
Catch eActualización As System.Exception
MessageBox.Show(eActualización.Message)
End Try
End If
End Sub
Public Sub ActualizaFuenteDeDatosTodos(ByVal Objcambios As dspedidos)
Try
Cnn.Open()
If Not (Objcambios) Is Nothing Then
Me.DaPrd.Update(Dsped.producto)
Me.DAPedidos.Update(Dsped.pedido)
Me.DALineas.Update(Dsped.linea)
Me.DaEmpleados.Update(Dsped.Empleados)
Me.daPrvAPed.Update(Dsped.proveedorApedido)
Me.DAPrvALinea.Update(Dsped.proveedorAlinea)
Me.daPlazoEntregaPedidos.Update(Dsped.PlazoEntregaPedidos)
Me.DaPedidoReal.Update(Dsped.PedidoReal)
Me.DaPedidoRealLinea.Update(Dsped.PedidoRealLinea)
End If
Catch EX As Exception
Throw EX
Finally
Cnn.Close()
End Try
End Sub
Leer las respuestas