Foros del Web » Programación para mayores de 30 ;) » .NET »

Actualizar una BD (ADO.NET) a partir de un XML DiffGram.

Estas en el tema de Actualizar una BD (ADO.NET) a partir de un XML DiffGram. en el foro de .NET en Foros del Web. Hola, tengo un problema y agradecería ENORMEMENTE cualquier ayuda. Necesito actualizar una base de datos Access por medio de un documento XML DiffGram que tiene ...
  #1 (permalink)  
Antiguo 25/04/2004, 18:25
 
Fecha de Ingreso: abril-2004
Mensajes: 3
Antigüedad: 20 años
Puntos: 0
Actualizar una BD (ADO.NET) a partir de un XML DiffGram.

Hola, tengo un problema y agradecería ENORMEMENTE cualquier ayuda.

Necesito actualizar una base de datos Access por medio de un documento XML DiffGram que tiene la misma estructura (esquema) que mi BD pero con los datos modificados (que deben ser las actualizaciones de la BD). La aplicación la realizo con C#, aunque si la solución la conoceis en Visual Basic .NET también me sirve.

Parto de un XML DiffGram ya generado por otra aplicación y consigo cargarlo en un dataset y visualizar en un DataGrid los resultados, pero no consigo actualizar la BD Access. No hago más que probar y probar y no consigo nada. Lo necesito para mi proyecto final de carrera, "ESTOY DESESPERADO".

Les muestro parte del código para ver si pueden decirme que falla y puedan ayudarme.


------------------ CÓDIGO -------------------

// Se hace la conexión a la BD indicada por "nombreBD"
OleDbConnection Conexion = new OleDbConnection("Provider=Microsoft.Jet.OLEDB.4.0; Data Source=" + nombreBD);
OleDbCommand Comando = new OleDbCommand();
OleDbDataAdapter Adaptador = new OleDbDataAdapter(Comando);
Conexion.Open();

// Carga del DataSet con el XML DiffGram y el Schema XSD
DataSet dsDatos = new DataSet();
dsDatos.ReadXmlSchema (tbRutaXSD.Text);
dsDatos.ReadXml (tbRutaXML.Text, XmlReadMode.DiffGram);
dsDatos.AcceptChanges();

// Se muestran los datos en un DataGrid
dataGrid1.DataSource = dsDatos;
dataGrid1.DataMember = "Table";

// Se almacenan los datos del DataSet en la BD
Adaptador.Update(dsDatos, "Table");
Conexion.Close();

------------------ FIN CÓDIGO -------------------

El DataGrid SI que muestra bien los datos, creo que el problema es actualizar la BD con el DataSet. No se si es que hay que pasar algún tipo de sentencia SQL al OleDbCommand o qué.

¿¿¿¿¿¿¿ QUE FALLA ???????

POR FAVOR, NECESITO CONSEGUIR ESTO.

GRACIAS POR ADELANTADO.

yTHoR.
  #2 (permalink)  
Antiguo 02/05/2004, 06:51
 
Fecha de Ingreso: abril-2004
Mensajes: 3
Antigüedad: 20 años
Puntos: 0
De acuerdo

Bueno, ya lo conseguí. Pongo aquí la solución por si a alguien le interesa este tema, y para despertar un poco el gusanillo explico brevemente el uso de los DiffGram.

DIFFGRAMS: Es un formato especial de documento XML que genera ADO.NET sobre cualquier conjunto de datos (DataSet) que permite almacenar los datos de la BD de forma local. Podría hacerse algo como lo siguiente (muy util): Pasar datos de una BD a XML DiffGram, enviar ese XML DiffGram a un dispositivo movil (Pocket PC, etc), el dispositivo móvil puede modificar el XML como si de la propia BD se tratase y luego generar otro XML DiffGram. Finalmente se podría actualizar la BD original leyendo el XML DiffGram que almacena los cambios.

------------------ CÓDIGO PARA ACTUALIZAR BD ACCESS --------------

// Se hace la conexión a la BD indicada por "nombreBD"
OleDbConnection Conexion = new OleDbConnection("Provider=Microsoft.Jet.OLEDB.4.0; Data Source=" + nombreBD);
OleDbDataAdapter Adaptador = new OleDbDataAdapter("SELECT * FROM Tabla",Conexion);
Conexion.Open();

// Carga del DataSet con el XML DiffGram y el Schema XSD
DataSet dsDatos = new DataSet();
dsDatos.ReadXmlSchema (tbRutaXSD.Text);
dsDatos.ReadXml (tbRutaXML.Text, XmlReadMode.DiffGram);

// Se muestran los datos en un DataGrid
dataGrid1.DataSource = dsDatos;
dataGrid1.DataMember = "Tabla";

// Se generan los comandos de actualizacion
OleDbCommandBuilder Comandos = new OleDbCommandBuilder(Adaptador);

// Se almacenan los datos del DataSet en la BD
Adaptador.Update(dsDatos, "Tabla");
Conexion.Close();

------------------ FIN CÓDIGO -------------------

El principal error estaba en "dsDatos.AcceptChanges();" ya que actualiza el dataset de tal forma que al hacer "Adaptador.Update(dsDatos, "Tabla");" no se reconocían cambios que actualizar.

Bueno, si a alguien le interesa ahí está, y si quieren más información ahora que lo he conseguido solo tienen que preguntar.

Bie.
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta

SíEste tema le ha gustado a 1 personas




La zona horaria es GMT -6. Ahora son las 01:39.