CLR: .Net / Mono / Boo / Otros CLR > C#

 recoger campos y valores de un XML y pasarlo a un datatable

<< < (2/3) > >>

+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

[0] Índice de Mensajes

[#] Página Siguiente

[*] Página Anterior

Ir a la versión completa