Importar Datos hacia un Dataset Remoto

05/01/2005 - 04:05 por LuisMora | Informe spam
Hola

Necesito realizar un bulk copy de unos datos obtenidos como consulta desde
un dataset local y luego enviarlos por medio de un webService a otra fuente
de datos.

Los datos de la consulta vienen con el rowstate en unchanged y de hecho no
los debo cambiar por lo que se me dificulta utilizar insertar los datos en el
dataset remoto.

Basicamente funciona asi lleno el ds1 con una consulta de datos , el web
service recibe el ds1 como parámetro borra el contenido del ds2 con un
comando y luego debería de insertar en el ds2 los datos porvenientes del ds1.
Ambos datasets guardan la misma estructura.

He utilizado merge, copy, importrow, etc, etc sin resolver el problema.
Simplemente no los copia.

Si tan solo pudiera cambiarle el rowstate a todas las filas del ds1 para que
sean (added) y pasarlas por el webservice para procesarlas con el application
block (Data Layer) sería genial pero entiendo que el rowstate es readonly.

Auxilio.

Luis
 

Leer las respuestas

#1 SqlRanger
05/01/2005 - 11:57 | Informe spam
La verdad es que no entiendo muy bien dónde está el problema ni donde está
verderamente ese dataset remoto.

Comentarios en línea

Saludos:

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


"LuisMora" escribió en el mensaje
news:
Hola

Necesito realizar un bulk copy de unos datos obtenidos como consulta desde
un dataset local y luego enviarlos por medio de un webService a otra
fuente
de datos.




¿Local a qué? ¿Cual es la máquina local? ¿De donde vienen los datos que
están en el datset? ¿Cargados mediante una consulta a una base de datos
usando un DataAdapter?

Los datos de la consulta vienen con el rowstate en unchanged y de hecho no
los debo cambiar por lo que se me dificulta utilizar insertar los datos en
el
dataset remoto.




Los datos de la consulta no vienen con ningún rowstate ya que no son
DataRows, son datos que devuelve el sistema de base de datos y punto. Cuando
un DataAdapter ejecuta el método Fill, el DataAdapter lee los datos
devueltos por la consulta de su SelectCommand mediante un DataReader, por
cada registro del datareader crea un DataRow, lo rellena con los datos del
DataReader y lo añade al DataTable, en este momento el DataRow tiene un
estado Added. Si la propiedad AcceptChangesDuringFill del DataAdapter es
True (así lo es de forma predeterminada), entoces el DataAdapter llama al
método AcceptChanges del DataRow, quedando el estado del DataRow como
Unchanged, pero si AcceptChangesDuringFill es False, el DataAdapter no llama
a AcceptChanges del DataRow y el estado del DataRow quedará como Added.

Así que si te interesa que los DataRows tengan un estado Added después de
llamar a Fill, sólo tienes que poner a false la propiedad
AcceptChangesDuringFill del DataAdapter

NOTA: si el DataRow ya existe en el DataTable, es decir, si tienen la misma
clave primaria, en vez de añadirlo lo actualiza, así que si
AcceptChangesDuringFill es false, el DataRow quedará con estado Changed en
vez de Added.

Basicamente funciona asi lleno el ds1 con una consulta de datos ,



¿Qué máquina hace esto?

el web
service recibe el ds1 como parámetro



¿Qué máquina llama al servicio web?
¿En qué máquina se ejecuta el servicio web?


borra el contenido del ds2 con un
comando



con el método clear ¿no?

¿De dónde ha salido ds2? ¿Dónde lo tienes guardado o de dónde lo has
obtenido y cuando?
¿Para qué obtener ds2 si borras su contenido?

y luego debería de insertar en el ds2 los datos porvenientes del ds1.
Ambos datasets guardan la misma estructura.




¿Por qué tienes que insertar los datos en ds2, no los tienes ya en ds1?

Si borras ds2 y luego haces ds2.merge(ds1), ds2 y ds1 serán idéndicos. ¿Qué
sentido tiene en tu caso tener dos copias de lo mismo?

He utilizado merge, copy, importrow, etc, etc sin resolver el problema.
Simplemente no los copia.



¿Seguro que no los copia?
¿Cómo has verificado que no los ha copiado?

ds2.Merge(ds1) copia los datos de ds1que no estén en ds2 a ds2 mantieniendo
el estado de los datarows de ds1

Si tan solo pudiera cambiarle el rowstate a todas las filas del ds1 para
que
sean (added) y pasarlas por el webservice para procesarlas con el
application
block (Data Layer) sería genial pero entiendo que el rowstate es readonly.





¿Has probado a poner AcceptChangesDuringFill a false antes de llamar a
DataAdapter.Fill( ds1 ) ?

Auxilio.




Espero haberte ayudado algo, aunque no lo sé, porque no entiendo muy bien
cual es el problema que quieres resolver.

Luis

Preguntas similares