El DataAdapter no me borra registros!!!!!

12/01/2005 - 12:21 por Adolfofb | Informe spam
Hola a todos:

tengo un SqlDataAdapter creado con el asistente y un DataSet tipado.

Si hago esto:

Me.SqlDataAdapter1.Fill(Me.Ds_prueba41)

Me.Ds_prueba41.Tables("mitabla").Rows.Remove(Me.Ds_prueba41.Tables("mitabla").Rows.Item(1))

Me.SqlDataAdapter1.Update(Me.Ds_prueba41)

Veo depurando el código que efectivamente SI borra el registro de la
datatable pero al hacer el update no hace ningún cambio en la BD de Datos.

Sin embargo si en vez de borrar un registro lo añado si que funciona bien.
entiendo que no tengo que hacer nada con los parametros que´el asistente
crea automaticamente llamados "@Original...".

Pretendo borrar varios registros del dataset y luego hacer un único Update.

Muchas gracias.
 

Leer las respuestas

#1 SqlRanger
12/01/2005 - 15:11 | Informe spam
No deberías utilizar Remove porque Remove quita la fila del datatable sin
dejar rastro de ella. En su lugar deberías usar Delete que marca la fila
como eliminada pero no la quita del datatable. Cuando llamamos al método
Update del DatAdapter, el DataAdapter se recorre todas las filas del
DataTable, si la fila es una fila nueva (RowState = Added), ejecuta el
InserCommand, si está eliminada (RowState= Deleted) ejecuta el
DeleteCommand, si está modificada (RowState = Modified) ejecuta el
UpdateCommand y si no está modificada (RowState = Unchanged) no hace nada.
Antes de ejecutar el comando correspondiente establece el valor de los
parámetos de dicho comando copiando el valor original o actual de la columna
correspondiente. Los parámetros de los comandos tienen dos propiedades
SourceColumn y SourceVersion que determinan el nombre de la columna del
datatable y su versión (original o actual) respectivamente, cuyo valor
deberá copiarse al parámetro antes de su ejecución. Una vez que el
DataAdapter llama al comando correspondiente, llama al método AcceptChanges
del datarow, y esto es lo que ocurre: si la fila era una fila eliminada se
quita definitivamente del DataTable y si era nueva o modificada se copian
los valores actuales a los valores originales y se marca la fila como sin
cambios (RowState = Unchanged)


Me.Ds_prueba41.Tables("mitabla").Rows(1).Delete

Saludos desde Madrid:

Jesús López
MVP Visual Basic
Mentor Asociado Solid Quality Learning
www.solidqualitylearning.com

PD: Agradecería saber si esta respuesta te ha servido


"Adolfofb" escribió en el mensaje
news:
Hola a todos:

tengo un SqlDataAdapter creado con el asistente y un DataSet tipado.

Si hago esto:

Me.SqlDataAdapter1.Fill(Me.Ds_prueba41)

Me.Ds_prueba41.Tables("mitabla").Rows.Remove(Me.Ds_prueba41.Tables("mitabla").Rows.Item(1))

Me.SqlDataAdapter1.Update(Me.Ds_prueba41)

Veo depurando el código que efectivamente SI borra el registro de la
datatable pero al hacer el update no hace ningún cambio en la BD de Datos.

Sin embargo si en vez de borrar un registro lo añado si que funciona bien.
entiendo que no tengo que hacer nada con los parametros que´el asistente
crea automaticamente llamados "@Original...".

Pretendo borrar varios registros del dataset y luego hacer un único
Update.

Muchas gracias.

Preguntas similares