CLR: .Net / Mono / Boo / Otros CLR > C#
recoger campos y valores de un XML y pasarlo a un datatable
+Onis:
--- Código: XML --- <PedidoTienda> <IdPedidoTienda>100019019</IdPedidoTienda> <Pedido xsi:nil="true" /> <IdEntidadOrigenPedido>19</IdEntidadOrigenPedido> <FechaPedido>2011-04-01T18:14:09.86</FechaPedido> <CodigoBarras>100019019</CodigoBarras> </PedidoTienda>
Tanto este cachito de XML como el código anterior(de los anteriores msgs) está recortado, porque si tengo que poner todo el código no acabamos ni mañana xD
SALUDOS!
gabio2:
--- Cita de: "+Onis" ---Mi intencion es solo esa, recoger campos del XML e insertarlos
--- Código: C# --- System.Collections.ArrayList ListaPedidos; // 1) Creo un objeto de tipo ArrayList. //private DataTable CreaTabla() // { // DataTable PedidoTienda = new DataTable(); // PedidoTienda.Clear(); // PedidoTienda.Columns.Add("idPedidoTienda", typeof(string)); // PedidoTienda.Columns.Add("Pedido", typeof(int)); //PedidoTienda.Columns.Add("IdentidadOrigenPedido", typeof(int)); //PedidoTienda.Columns.Add("FechaPedido", typeof(DateTime)); // PedidoTienda.Columns.Add("CodigoBarras", typeof(string)); // return PedidoTienda; // }
--- Código: C# --- CabPedido CPedido = new CabPedido(); XmlNodeList pedidostiendas = xDoc.GetElementsByTagName("PedidoTienda");//idtabla=122-->PedidosTiendas ListaPedidos = new System.Collections.ArrayList(); // 2) Hago una instancia de mi objeto foreach (XmlElement nodo in pedidostiendas) { int i = 0; CPedido.idPedidoTienda = Convert.ToUInt32(nodo.GetElementsByTagName("IdPedidoTienda") [i].InnerText); if (CPedido.Pedido == null) { CPedido.Pedido = Convert.ToInt32(nodo.GetElementsByTagName("Pedido")[i].InnerText);//nodo xsi.nil } CPedido.IdentidadOrigenPedido = Convert.ToInt32(nodo.GetElementsByTagName("IdEntidadOrigenPedido")[i].InnerText); CPedido.FechaPedido = Convert.ToDateTime(nodo.GetElementsByTagName("FechaPedido")[i].InnerText); CPedido.CodigoBarras = nodo.GetElementsByTagName("CodigoBarras")[i].InnerText; ListaPedidos.Add(CPedido); // 3) Agrego tu objeto CPedido a mi lista. } //FIN FOREACH// DataTable miTabla; // miTabla = CreaTabla(); // DataRow getpedido = miTabla.NewRow();//definicion del datarow del tipo DataTable(miTabla-->PedidoTienda) // getpedido["idPedidoTienda"] = Convert.ToUInt32(nodo.GetElementsByTagName("IdPedidoTienda")[i].InnerText); // getpedido["Pedido"]=CPedido.Pedido ; // getpedido["IdentidadOrigenPedido"]=CPedido.IdentidadOrigenPedido ; // getpedido["FechaPedido"]=CPedido.FechaPedido ; // getpedido["CodigoBarras"]=CPedido.CodigoBarras ; //miTabla.Rows.Add(getpedido);
--- Fin de la cita ---
Con 3 lineas que agregue.. si te das cuenta elimine como 20 xD jajajaja.. no necesitas usar el DataTable... ahora tienes un objeto(ListaPedidos) de tipo ArrayList que puedes enviar a tu capa de datos (si es que estás usando Programación por Capas) y en tu capa de datos recorres el ArrayList de la siguiente manera:
--- Código: C# --- foreach(CabPedido MiPedido in ListaPedidos){//Tú código para INSERTS/UPDATE/DELETE aquí va.// espero te sirva. :D }
Bueno.. pues si tienes alguna duda.. solo pregunta.. saludos.. :)
+Onis:
Me fué genial!! muchissimas gracias!! :D pronto apareceré con otra duda jejeje
+Onis:
Directamente engancho todo el código que asi creo que nos evitaremos que os pierda... la cosa:
-como veis al inicio del codigo recojo 3 xmls diferentes...más adelante de cada uno de esos XML
recojo un campo(en realidad seran muchas de cada uno,,,pero mejor simplificarlo ya que no es lo importante)
y los meto en las variables de la estructura que le pertoque.
La parte que no entiendo, es como hago (en los foreach) para que pueda trabajar con las 3 variables, para realizar el insert
en la tabla de oracle,,,,,
Espero haberme explicado suficientemente bien. GRACIASSS!!!
--- Código: C# --- namespace prueba2{ public partial class Form1 : Form { public Form1() { InitializeComponent(); } private static readonly string cnnStrTPV = ConfigurationManager.ConnectionStrings["xTrelaTPVConnectionString"].ConnectionString; System.Data.OracleClient.OracleConnection conn = new System.Data.OracleClient.OracleConnection(); int idtabla; long Id; string sql = ""; // System.Collections.ArrayList ListaPedidos = new System.Collections.ArrayList();//definimos e instanciamos el objeto ArrayList CabPedido CPedido = new CabPedido(); System.Collections.ArrayList ListaTickets = new System.Collections.ArrayList(); CabTicket CTicket = new CabTicket(); System.Collections.ArrayList ListaOperacionesT = new System.Collections.ArrayList(); CabOperac COperac = new CabOperac(); //Código encargado de realizar la conexion con la BBDD //y de llamar al método que realiza la recogida del XML del campo de la bbdd //y de crear el archivo xml en la ruta especificada private void RecogerXML() { XmlDocument doc1 = new XmlDocument(); XmlDocument doc2 = new XmlDocument(); XmlDocument doc3 = new XmlDocument(); SqlConnection cnn = new SqlConnection(cnnStrTPV); cnn.Open(); LoadXml1(cnn, doc1); LoadXml2(cnn, doc2); LoadXml3(cnn, doc3); cnn.Close(); doc1.Save("C:\Users\davidms\Desktop\temp\OutputXml1.xml"); doc2.Save("C:\Users\davidms\Desktop\temp\OutputXml2.xml"); doc3.Save("C:\Users\davidms\Desktop\temp\OutputXml3.xml"); MessageBox.Show("Archivo XML importado y creado correctamente", "Info", MessageBoxButtons.OK, MessageBoxIcon.Information); } //Método que recoge el campo xml de la bbdd protected bool LoadXml1(SqlConnection cnn, XmlDocument doc1) { //Leemos el campo serialización(XML) de la bbdd. idtabla = 122;//pedidostiendas Id = 10001901982; sql = @"SELECT Serializacion FROM xTrelaTPV..OPERACIONES WHERE IdOperacion =" + Id + "and idtabla=" + idtabla + ""; SqlCommand cm = new SqlCommand(sql, cnn); /* cm.Parameters.Add(new SqlParameter("@IdOperacion", 10001901982));//id de ejemplo //10009801627)); //cm.Parameters.Add(new SqlParameter("@Idtabla", 122));//Idtabla PedidosTiendas //127));//id tabla OperacionesTalleresHistorico*/ using (SqlDataReader dr = cm.ExecuteReader()) { if (dr.Read()) { SqlXml MiXml = dr.GetSqlXml(dr.GetOrdinal("Serializacion")); doc1.LoadXml(MiXml.Value); return true; } else { return false; } } } protected bool LoadXml2(SqlConnection cnn, XmlDocument doc2) { idtabla = 127;//OperacionesTalleresHistorico Id = 1001520165; sql = @"SELECT Serializacion FROM xTrelaTPV..OPERACIONES WHERE IdOperacion =" + Id + "and idtabla=" + idtabla + ""; SqlCommand cm = new SqlCommand(sql, cnn); using (SqlDataReader dr = cm.ExecuteReader()) { if (dr.Read()) { SqlXml MiXml = dr.GetSqlXml(dr.GetOrdinal("Serializacion")); doc2.LoadXml(MiXml.Value); return true; } else { return false; } } } protected bool LoadXml3(SqlConnection cnn, XmlDocument doc3) { //Leemos el campo serialización(XML) de la bbdd. idtabla = 135;//tickets Id = 100098011891; sql = @"SELECT Serializacion FROM xTrelaTPV..OPERACIONES WHERE IdOperacion =" + Id + "and idtabla=" + idtabla + ""; SqlCommand cm = new SqlCommand(sql, cnn); using (SqlDataReader dr = cm.ExecuteReader()) { if (dr.Read()) { SqlXml MiXml = dr.GetSqlXml(dr.GetOrdinal("Serializacion")); doc3.LoadXml(MiXml.Value); return true; } else { return false; } } } //Método encargado de sacar los campos del xml //moviendose por los diferentes nodos del archivo public void GetCampos_PedidoTienda() { XmlDocument xDoc = new XmlDocument();//XmlDocument nos permite editar el XML //La ruta del documento XML permite rutas relativas //respeto del ejecutable! xDoc.Load("C:/Users/davidms/Desktop/temp/OutputXml1.xml");//ruta del archivo xml XmlNodeList pedidostiendas = xDoc.GetElementsByTagName("PedidoTienda");//idtabla=122-->PedidosTiendas foreach (XmlElement nodo in pedidostiendas) { int i = 0; CPedido.idPedidoTienda = Convert.ToUInt32(nodo.GetElementsByTagName("IdPedidoTienda")[i].InnerText); if (CPedido.Pedido == null) { CPedido.Pedido = Convert.ToInt32(nodo.GetElementsByTagName("Pedido")[i].InnerText);//nodo xsi.nil } CPedido.IdentidadOrigenPedido = Convert.ToInt32(nodo.GetElementsByTagName("IdEntidadOrigenPedido")[i].InnerText); CPedido.FechaPedido = (nodo.GetElementsByTagName("FechaPedido")[i].InnerText); CPedido.CodigoBarras = nodo.GetElementsByTagName("CodigoBarras")[i].InnerText; CPedido.IdDivisa = Convert.ToInt32(nodo.GetElementsByTagName("IdDivisa")[i].InnerText); CPedido.AvisarALaRecepcion = Convert.ToBoolean(nodo.GetElementsByTagName("AvisarAlaRecepcion")[i].InnerText); CPedido.SMS = Convert.ToBoolean(nodo.GetElementsByTagName("Sms")[i].InnerText); CPedido.AvisarALaRecepcionCompletaDelPedido = Convert.ToBoolean(nodo.GetElementsByTagName("AvisarAlaRecepcionCompletaDelPedido")[i].InnerText); //Agrego la estructura o objeto CPedido a mi ArrayList ListaPedidos.Add(CPedido); // } } public void GetCampos_Ticket() { XmlDocument xDoc = new XmlDocument();//XmlDocument nos permite editar el XML //La ruta del documento XML permite rutas relativas //respeto del ejecutable! xDoc.Load("C:/Users/davidms/Desktop/temp/OutputXml2.xml");//ruta del archivo xml XmlNodeList Ptickets = xDoc.GetElementsByTagName("Ticket");//idtabla=135-->Tickets foreach (XmlElement nodo in Ptickets) { int i = 0; //CTicket.IdEntidad =Convert.ToInt32(nodo.GetElementsByTagName("IdEntidad")[i].InnerText); CTicket.CodigoBarras = (nodo.GetElementsByTagName("CodigoBarras")[i].InnerText); CTicket.NumeroTicket = Convert.ToInt32(nodo.GetElementsByTagName("NumeroTicket")[i].InnerText); CTicket.Fecha = (nodo.GetElementsByTagName("Fecha")[i].InnerText);//tabla de pruebas-> DATE ,,cambiado a VARCHAR ListaTickets.Add(CTicket); } } public void GetCampos_OperacTaller() { XmlDocument xDoc = new XmlDocument();//XmlDocument nos permite editar el XML //La ruta del documento XML permite rutas relativas //respeto del ejecutable! xDoc.Load("C:/Users/davidms/Desktop/temp/OutputXml3.xml");//ruta del archivo xml XmlNodeList operaciontallerH = xDoc.GetElementsByTagName("OperacionTallerHistorico");//idtabla=127-->OperacionTallerHist foreach (XmlElement nodo in operaciontallerH) { int i = 0; COperac.IdOperacionTaller = Convert.ToUInt32(nodo.GetElementsByTagName("IdOperacionTaller")[i].InnerText); COperac.DescripcionGeneradaReparacion = nodo.GetElementsByTagName("DescripcionGeneradaReparacion")[i].InnerText; COperac.FechaOperacionTaller = nodo.GetElementsByTagName("FechaOperacionTaller")[i].InnerText; ListaOperacionesT.Add(COperac); } } public void InsertOracle() { // TODO: Modify the connection string and include any // additional required properties for your database. conn.ConnectionString = "Data Source=DEVELOP_ORASRVDEV03;" + //schema bbdd "User ID=xxxxx;" + //usuario "Password=xxxxxxxxx"; //password conn.Open();//--abrimos conexion //Declaro una variable de tipo command del oracle System.Data.OracleClient.OracleCommand MiComando = new System.Data.OracleClient.OracleCommand(); foreach (CabPedido MiPedido in ListaPedidos) { foreach (CabTicket MiTicket in ListaTickets) { foreach (CabOperac MiOperacion in ListaOperacionesT) { System.Data.OracleClient.OracleParameter var1; System.Data.OracleClient.OracleParameter var2; System.Data.OracleClient.OracleParameter var3; var1 = new System.Data.OracleClient.OracleParameter(); var2 = new System.Data.OracleClient.OracleParameter(); var3 = new System.Data.OracleClient.OracleParameter(); var1.OracleType = System.Data.OracleClient.OracleType.Int32; var2.OracleType = System.Data.OracleClient.OracleType.VarChar; var3.OracleType = System.Data.OracleClient.OracleType.VarChar; var1.Value = CPedido.idPedidoTienda; var2.Value = CTicket.CodigoBarras; var3.Value = COperac.FechaOperacionTaller; MiComando.Parameters.Clear(); try { string oracle = "Insert into TO_PRUEBAS" + "(IDPEDIDO,CODIGOBARRAS,FECHA)" + "values('" + var2.Value + "'," + var1.Value + ",'" + (Convert.ToDateTime(var3.Value)) + "')"; MiComando = new OracleCommand(oracle, conn); MiComando.ExecuteNonQuery(); MessageBox.Show("Ejecución realizada con éxito", "INFO", MessageBoxButtons.OK, MessageBoxIcon.Information); } catch (Exception err) { MessageBox.Show("Error..." + err.Message, "ERROR", MessageBoxButtons.OK, MessageBoxIcon.Error); } conn.Close();//--cerramos conexión File.Delete("C:/Users/davidms/Desktop/temp/OutputXml1.xml"); File.Delete("C:/Users/davidms/Desktop/temp/OutputXml2.xml"); File.Delete("C:/Users/davidms/Desktop/temp/OutputXml3.xml"); } } } } public class CabPedido //dentro el XML la primera tabla que //indica en este caso PEDIDOTIENDA { public long idPedidoTienda; public int Pedido; public int IdentidadOrigenPedido; public string FechaPedido;//si lo pones a String y en el momento del Insert lo conviertes a date,,,mejor public string CodigoBarras; public int IdDivisa; //tinyint public bool AvisarALaRecepcion; //bit --> bool¿? public bool SMS; //bit public bool AvisarALaRecepcionCompletaDelPedido; //bit public int IdCaja; //tinyint public long IdTicket; //bigint public int Comodin1; public int Comodin2; public int Comodin3; public int Comodin4; public bool Comodin5; //bit public bool Comodin6; //bit public string Comodin7; //nvarchar(10) public string Comodin8; //nvarchar(100) public DateTime Comodin9; public DateTime Comodin10; public long IdEmpleado; //bigint public int IdEntidadDestinoPedido; public long Comodin11; //bigint public long Comodin12; //bigint public int Comodin13; //money public int Comodin14; //money public bool Comodin15; //bit public bool Comodin16; //bit public DateTime Comodin17; public DateTime Comodin18; public string Comodin19;// nvarchar(300) //public string Comodin20 //xml public int Categoria1; public int Categoria2; public int Categoria3; public int Categoria4; public int Categoria5; } public class CabTicket//XML Tickets { public long IdTicket;//bigint public int IdEntidad; public int IdCaja;//tinyint public int NumeroTicket; public string Fecha;//DateTime public int IdTipoTicket; public int IdCajaSesion; public long IdEmpleado;//bigint public decimal PorcentajeDescuentoGlobal;//numeric(6,3) public int ImporteDescuentoGlobal;//money public bool emitido;//bit public int IdEstadoTicket; public string CodigoBarras; public long IdTicketEnlace; public int Comodin1; public int Comodin2; public int Comodin3; public int Comodin4; //money public bool Comodin5; //bit public bool Comodin6; //bit public string Comodin7; //nvarchar(10) public string Comodin8; //nvarchar(100) public DateTime Comodin9; public DateTime Comodin10; public long Comodin11; //bigint public long Comodin12; //bigint public int Comodin13; //money public int Comodin14; //money public bool Comodin15; //bit public bool Comodin16; //bit public DateTime Comodin17; public DateTime Comodin18; public string Comodin19;// nvarchar(300) //public string Comodin20 //xml //en la tabla hay 4 campos más, que no creo pinten nada.. } public class CabOperac //XML OperacionesTalleresHistorico { public long IdOperacionTallerHistorico;//bigint public long IdOperacionTaller;//bigint public string FechaOperacionTaller;//DATETIME public string DescripcionGeneradaReparacion; public bool SolicitarPresupuesto;//bit public bool ViajaPieza;//bit public int PresupuestoOperacionTaller;//money public bool PresupuestoAceptadoPorCliente;//bit public bool PresupuestoModificadoPorCentral;//bit public bool PresupuestoModificadoPorTienda;//bit public bool InformadoCliente; } private void button1_Click(object sender, EventArgs e) { RecogerXML(); } private void button2_Click(object sender, EventArgs e) { GetCampos_PedidoTienda(); GetCampos_Ticket(); GetCampos_OperacTaller(); InsertOracle(); } private void button3_Click(object sender, EventArgs e) { this.Close(); } } }
+Onis:
no hay respuesta? :(
Navegación
[#] Página Siguiente
[*] Página Anterior
Ir a la versión completa