• Viernes 29 de Marzo de 2024, 09:17

Autor Tema:  DataSet?  (Leído 1678 veces)

+Onis

  • Nuevo Miembro
  • *
  • Mensajes: 12
    • Ver Perfil
DataSet?
« en: Martes 30 de Agosto de 2011, 11:40 »
0
Hola, ante todo gracias por leer este mensaje,…ya hace tiempo que mantengo una lucha con este programa, el cual recoge   un XML de una tabla de SQL, lo desglosa e inserta los campos necesarios en una o varias tablas de ORACLE.
Demomento, en lo que veis de código(es una version mini del programa grande), recojo un solo XML desde un id concreto de operación y un id concreto de tabla…lo que querria es poder automatizar este select y solo tener que especificarle el idtabla,,,y que él solito vaya cogiendo todos los xml con el idtabla=122, en este caso,,y los vaya insertando en la tabla de oracle,,,en vez de ir 1 por 1 a manija concretandole el idoperacion. Me supongo que para ello seria necesario un “datatable”, pero no entiendo la mecánica, si me podeis enseñar como, lo agradeceria enormemente.
MUCHAS GRACIAS.



Código: C#
  1. namespace TO_REC
  2. {
  3.     public partial class Form1 : Form
  4.     {
  5.         public Form1()
  6.         {
  7.             InitializeComponent();
  8.         }
  9.  
  10.         private static readonly string cnnStrTPV =
  11.            ConfigurationManager.ConnectionStrings["xTrelaTPVConnectionString"].ConnectionString;
  12.  
  13.         System.Data.OracleClient.OracleConnection conn =
  14.             new System.Data.OracleClient.OracleConnection();
  15.  
  16.         int idtabla;
  17.         long Id;
  18.         string sql = "";
  19.  
  20.         System.Collections.ArrayList ListaPedidos =
  21.                new System.Collections.ArrayList();
  22.  
  23.          //Instanciamos el objeto de la estructura
  24.           CabPedido CPedido         =  new CabPedido();  
  25.           PedidoDetalle PDetalle    =  new PedidoDetalle();
  26.  
  27.  
  28.         private void RecogerXML()
  29.         {
  30.  
  31.             XmlDocument doc1 = new XmlDocument();
  32.            
  33.             SqlConnection cnn = new SqlConnection(cnnStrTPV);
  34.  
  35.             cnn.Open();
  36.  
  37.             LoadXml1(cnn, doc1);
  38.  
  39.             cnn.Close();
  40.  
  41.             doc1.Save("C:\\Users\\dnonis\\Desktop\\temp\\OutputXml1.xml");
  42.            
  43.         }
  44.  
  45.  
  46.  
  47.         protected bool LoadXml1(SqlConnection cnn, XmlDocument doc1)
  48.         {
  49.             //Leemos el campo serialización(XML) de la bbdd.
  50.  
  51.  
  52.             idtabla = 122;//pedidostiendas
  53.             Id = //100019014084;
  54.                  //100163019855;
  55.                   1001310122429;
  56.                  //100152014221;
  57.  
  58.             sql = @"SELECT Serializacion
  59.                    FROM xTrelaTPV..OPERACIONES
  60.                    WHERE IdOperacion =" + Id +
  61.                    "and idtabla=" + idtabla + "";
  62.  
  63.             SqlCommand cm = new SqlCommand(sql, cnn);
  64.             using (SqlDataReader dr = cm.ExecuteReader())
  65.             {
  66.                 if (dr.Read())
  67.                 {
  68.                     SqlXml MiXml = dr.GetSqlXml(dr.GetOrdinal("Serializacion"));
  69.                     doc1.LoadXml(MiXml.Value);
  70.                     return true;
  71.                 }
  72.                 else
  73.                 {
  74.                     return false;
  75.                 }
  76.             }
  77.         }
  78.  
  79.         public void GetCampos_PedidoTienda()
  80.         {
  81.             XmlDocument xDoc = new XmlDocument();//XmlDocument nos permite editar el XML
  82.             //La ruta del documento XML permite rutas relativas
  83.             //respeto del ejecutable!
  84.  
  85.             xDoc.Load("C:/Users/dnonis/Desktop/temp/OutputXml1.xml");//ruta del archivo xml
  86.  
  87.             XmlNodeList pedidostiendas =
  88.                 xDoc.GetElementsByTagName("PedidoTienda");//idtabla=122-->PedidosTiendas
  89.  
  90.  
  91.             foreach (XmlElement nodo in pedidostiendas)
  92.             {
  93.  
  94.                
  95.                 CPedido.IdPedidoTienda = Convert.ToUInt64(nodo.GetElementsByTagName("IdPedidoTienda")[0].InnerText);//nodo xsi.nil
  96.  
  97.                 CPedido.IdentidadOrigenPedido = Convert.ToInt32(nodo.GetElementsByTagName("IdEntidadOrigenPedido")[0].InnerText);
  98.  
  99.                 CPedido.FechaPedido = nodo.GetElementsByTagName("FechaPedido")[0].InnerText;
  100.  
  101.                 CPedido.CodigoBarras = nodo.GetElementsByTagName("CodigoBarras")[0].InnerText;
  102.  
  103.                 CPedido.IdDivisa = Convert.ToInt32(nodo.GetElementsByTagName("IdDivisa")[0].InnerText);
  104.  
  105.                 CPedido.IdTicket = nodo.GetElementsByTagName("IdTicket")[0].InnerText;
  106.  
  107.                 CPedido.Comodin2 = nodo.GetElementsByTagName("Comodin2")[0].InnerText;
  108.  
  109.                 CPedido.Comodin8 = nodo.GetElementsByTagName("Comodin8")[0].InnerText;
  110.  
  111.                 CPedido.IdEmpleado = nodo.GetElementsByTagName("IdEmpleado")[0].InnerText;
  112.  
  113.                
  114.                 ListaPedidos.Add(CPedido);
  115.              
  116.             }
  117.  
  118.              XmlNodeList pedidostiendasDetalleCollection =
  119.                 xDoc.GetElementsByTagName("PedidoTiendaDetalleCollection");
  120.                 XmlNodeList PedidoTiendaDetalle =
  121.                   ((XmlElement)pedidostiendasDetalleCollection[0]).GetElementsByTagName("PedidoTiendaDetalle");
  122.            
  123.  
  124.                 foreach (XmlElement nodo1 in PedidoTiendaDetalle)
  125.                 {
  126.  
  127.                     PDetalle.IdPedidoTienda1 = Convert.ToUInt64(nodo1.GetElementsByTagName("IdPedidoTienda")[0].InnerText);
  128.                    
  129.                     PDetalle.Linea = Convert.ToInt32(nodo1.GetElementsByTagName("Linea")[0].InnerText);
  130.                    
  131.                     PDetalle.IdTipoPedido = Convert.ToInt32(nodo1.GetElementsByTagName("IdTipoPedido")[0].InnerText);
  132.                    
  133.                     PDetalle.IdEntidadDestinoPedido = Convert.ToInt32(nodo1.GetElementsByTagName("IdEntidadDestinoPedido")[0].InnerText);
  134.                    
  135.                     PDetalle.FechaPrevistaEntregaEnTienda = nodo1.GetElementsByTagName("FechaPrevistaEntregaEnTienda")[0].InnerText;
  136.                    
  137.                     PDetalle.FechaEfectivaEntregaEnTienda = nodo1.GetElementsByTagName("FechaEfectivaEntregaEnTienda")[0].InnerText;
  138.                    
  139.                     PDetalle.IdArticuloVariante = nodo1.GetElementsByTagName("IdArticuloVariante")[0].InnerText;
  140.                    
  141.                     PDetalle.Unidades = nodo1.GetElementsByTagName("Unidades")[0].InnerText;
  142.                    
  143.                     PDetalle.UnidadesServidas = nodo1.GetElementsByTagName("UnidadesServidas")[0].InnerText;
  144.                    
  145.                     PDetalle.UnidadesCanceladas = nodo1.GetElementsByTagName("UnidadesCanceladas")[0].InnerText;
  146.                    
  147.                     PDetalle.PrecioVenta = nodo1.GetElementsByTagName("PrecioVenta")[0].InnerText;
  148.                    
  149.                     PDetalle.CodigoBarras = nodo1.GetElementsByTagName("CodigoBarras")[0].InnerText;
  150.                    
  151.                     PDetalle.IdPrioridadPedido = Convert.ToInt32(nodo1.GetElementsByTagName("IdPrioridadPedido")[0].InnerText);
  152.  
  153.                     if (PDetalle.IdReserva == null) { PDetalle.IdReserva = Convert.ToUInt32(nodo1.GetElementsByTagName("IdReserva")[0].InnerText); }
  154.  
  155.                     if (PDetalle.IdValija == null)  { PDetalle.IdValija = Convert.ToUInt32(nodo1.GetElementsByTagName("IdValija")[0].InnerText); }
  156.  
  157.                     if (PDetalle.IdEstadoPedido == null) { PDetalle.IdEstadoPedido = Convert.ToInt32(nodo1.GetElementsByTagName("IdEstadoPedido")[0].InnerText); }
  158.  
  159.                     PDetalle.notas = nodo1.GetElementsByTagName("Observaciones")[0].InnerText;
  160.  
  161.  
  162.                 ListaPedidos.Add(PDetalle);
  163.  
  164.                 }
  165.         }
  166.  
  167.         public void InsertPedidosTotalOracle()
  168.         {
  169.  
  170.             conn.ConnectionString =
  171.                    "Data Source=DEVELOP_ORASRVDEV03;" + //schema bbdd
  172.                    "User ID=xxxxx;" +                   //usuario
  173.                    "Password=xxxxxxxxx";    //password
  174.  
  175.             conn.Open();//--abrimos conexion
  176.  
  177.             //Declaro una variable de tipo command del oracle
  178.             System.Data.OracleClient.OracleCommand MiComando = new System.Data.OracleClient.OracleCommand();
  179.             System.Data.OracleClient.OracleCommand MiComando2= new System.Data.OracleClient.OracleCommand();
  180.  
  181.            
  182.             /*OracleTransaction transaction1;
  183.             OracleTransaction transaction2;*/
  184.  
  185.             ////////-------------------
  186.             System.Data.OracleClient.OracleParameter var1 = new System.Data.OracleClient.OracleParameter();
  187.             var1.OracleType = System.Data.OracleClient.OracleType.UInt32;
  188.            
  189.             if (CPedido.IdTicket == "") { var1.Value = Convert.ToUInt64(0); }
  190.             else if (CPedido.IdTicket != "") { var1.Value = Convert.ToUInt64(CPedido.IdTicket); }
  191.             else { var1.Value = Convert.ToUInt32(0); }
  192.             ////////-------------------
  193.             System.Data.OracleClient.OracleParameter var2 = new System.Data.OracleClient.OracleParameter();
  194.             var2.OracleType = System.Data.OracleClient.OracleType.Int32;
  195.            
  196.             if (CPedido.Comodin2 == "") { var2.Value = Convert.ToInt32(0); }
  197.             else if (CPedido.Comodin2 != "") { var2.Value = Convert.ToInt32(CPedido.Comodin2); }
  198.             else { var2.Value = Convert.ToUInt32(0); }
  199.             ////////-------------------
  200.             System.Data.OracleClient.OracleParameter var3 = new System.Data.OracleClient.OracleParameter();
  201.             var3.OracleType = System.Data.OracleClient.OracleType.UInt32;
  202.            
  203.             if (CPedido.IdEmpleado == "") { var3.Value = Convert.ToUInt64(0); }
  204.             else if (CPedido.IdEmpleado != "") { var3.Value = Convert.ToUInt64(CPedido.IdEmpleado); }
  205.             else { var3.Value = Convert.ToUInt32(0); }
  206.             ////////-------------------
  207.             System.Data.OracleClient.OracleParameter var4 = new System.Data.OracleClient.OracleParameter();
  208.             var4.OracleType = System.Data.OracleClient.OracleType.VarChar;
  209.  
  210.             if (PDetalle.FechaPrevistaEntregaEnTienda == "") { var4.Value = "null"; }
  211.             else { var4.Value = Convert.ToDateTime(PDetalle.FechaPrevistaEntregaEnTienda); }
  212.             ////////-------------------
  213.             System.Data.OracleClient.OracleParameter var5 = new System.Data.OracleClient.OracleParameter();
  214.             var5.OracleType = System.Data.OracleClient.OracleType.VarChar;
  215.  
  216.             if (PDetalle.FechaEfectivaEntregaEnTienda == "") { var5.Value = "null"; }
  217.             else { var5.Value = Convert.ToDateTime(PDetalle.FechaEfectivaEntregaEnTienda); }
  218.             ////////-------------------
  219.            
  220.  
  221.             MiComando.Parameters.Clear();
  222.  
  223.            /* // Start a local transaction
  224.             transaction2 = conn.BeginTransaction(IsolationLevel.ReadCommitted);
  225.             // Assign transaction object for a pending local transaction
  226.              MiComando2.Transaction = transaction2;
  227.             */
  228.             try
  229.             {
  230.                 string numTPV=Convert.ToString(CPedido.IdPedidoTienda);
  231.                 string numTPVsbtr= numTPV.Substring(7,2);
  232.  
  233.                 //string numTicket = Convert.ToString(CPedido.IdTicket);
  234.                 //string numTicketsbtr = numTicket.Substring(10, (numTPV.Length));
  235.                
  236.  
  237.                 string oracle = "Insert into TO_REC_PEDIDOS_TIENDAS_CAB" +
  238.                                 "(CODIGO_EMPRESA,NUMERO_PEDIDO,TIENDA_ORIGEN,FECHA_PEDIDO,"+
  239.                                 "CODIGO_BARRAS_PEDIDO,CODIGO_DIVISA," +
  240.                                 "NUMERO_TPV,NUMERO_TIQUET,CLIENTE_DESTINO,PEDIDO_ORIGINAL_XTRELA," +
  241.                                 "CODIGO_TRABAJADOR,PERSONA_PEDIDO)" +
  242.                                 "VALUES('1234D',"+CPedido.IdPedidoTienda+"," +CPedido.IdentidadOrigenPedido+ ",'"+
  243.                                 Convert.ToDateTime(CPedido.FechaPedido)+"','"+CPedido.CodigoBarras+"',"+CPedido.IdDivisa+ ","+
  244.                                 Convert.ToInt32(numTPVsbtr)+","+var1.Value+",'EJEMPLO',"+
  245.                                 var2.Value+","+var3.Value+",'"+CPedido.Comodin8+"')";
  246.  
  247.  
  248.                 string oracle_= "Insert into TO_REC_PEDIDOS_TIENDAS_LIN" +
  249.                                 "(CODIGO_EMPRESA,NUMERO_PEDIDO,NUMERO_LINEA,TIPO_PEDIDO," +
  250.                                 "CLIENTE_DESTINO,FECHA_ENTREGA_PREVISTA,FECHA_ENTREGA_REAL,"+
  251.                                 "CODIGO_ARTICULO,UNIDADES_PEDIDAS,UNIDADES_SERVIDAS,UNIDADES_CANCELADAS,"+//,"+
  252.                                 "PRECIO_VENTA,CODIGO_BARRAS_SOBRE,PRIORIDAD_PEDIDO,"+
  253.                                 "NUMERO_RESERVA,NUMERO_VALIJA,STATUS_PEDIDO,"+
  254.                                 "OBSERVACIONES)"+
  255.                                 "VALUES('1234D',"+PDetalle.IdPedidoTienda1+","+PDetalle.Linea+",'"+
  256.                                 PDetalle.IdTipoPedido+"','"+PDetalle.IdEntidadDestinoPedido+"','"+
  257.                                 var4.Value+"','"+var5.Value+"','"+
  258.                                 PDetalle.IdArticuloVariante+"','"+(PDetalle.Unidades)+"','"+
  259.                                 (PDetalle.UnidadesServidas)+"','"+(PDetalle.UnidadesCanceladas)+"','"+
  260.                                 PDetalle.PrecioVenta+"','"+PDetalle.CodigoBarras+"',"+PDetalle.IdPrioridadPedido+","+
  261.                                 PDetalle.IdReserva+","+PDetalle.IdValija+","+
  262.                                 PDetalle.IdEstadoPedido+","+PDetalle.notas+")";
  263.                
  264.                
  265.                
  266.                 MiComando = new OracleCommand(oracle, conn);
  267.                 MiComando.ExecuteNonQuery();
  268.  
  269.                 MiComando2 = new OracleCommand(oracle_, conn);
  270.                 MiComando2.ExecuteNonQuery();
  271.                
  272.                 //transaction2.Commit();
  273.  
  274.                 MessageBox.Show("Ejecución realizada con éxito", "INFO",
  275.                    MessageBoxButtons.OK, MessageBoxIcon.Information);
  276.  
  277.                
  278.             }
  279.             catch (Exception err)
  280.             {
  281.                
  282.                 //transaction2.Rollback();
  283.  
  284.                 MessageBox.Show("Error..." + err.Message, "ERROR",
  285.                   MessageBoxButtons.OK, MessageBoxIcon.Error);
  286.  
  287.                 MessageBox.Show("Para más información consulte con su Administrador");
  288.  
  289.             }
  290.  
  291.             conn.Close();//--cerramos conexión
  292.  
  293.  
  294.             this.Close();//cerramos y salimos de la aplicación
  295.  
  296.         }
  297.  
  298.  
  299.             public class CabPedido //--> .:Oracle:. "TO_REC_PEDIDOS_TIENDAS_CAB"
  300.         {
  301.  
  302.             //Codigo_Empresa
  303.             public ulong IdPedidoTienda;
  304.             public int IdentidadOrigenPedido;
  305.             public string FechaPedido;
  306.             public string CodigoBarras;
  307.             public int IdDivisa;//tinyint
  308.             public string IdTicket;//bigint
  309.             //cliente_destino
  310.             public string Comodin2;
  311.             public string Comodin8;//nvarchar(100)
  312.             public string IdEmpleado;//bigint
  313.             //Fecha_Grabacion
  314.         }
  315.  
  316.  
  317.          
  318.              public class PedidoDetalle //--> "TO_REC_PEDIDOS_TIENDAS_LIN"
  319.         {
  320.             //Codigo_Empresa
  321.             public ulong IdPedidoTienda1;
  322.             public ulong IdPedidoTiendaDetalle;//¿¿??
  323.             public int Linea;
  324.             public int IdTipoPedido;
  325.             public int IdEntidadDestinoPedido;
  326.             public string FechaPrevistaEntregaEnTienda;//DATETIME
  327.             public string FechaEfectivaEntregaEnTienda;//DATETIME
  328.             //fecha real de entrega a cliente
  329.             public string IdArticuloVariante;
  330.             public string Unidades;//Numeric(11,4)
  331.             public string UnidadesServidas;//Numeric(11,4)
  332.             public string UnidadesCanceladas;//Numeric(11,4)
  333.             public string PrecioVenta;//money
  334.             public string CodigoBarras;
  335.             public int IdPrioridadPedido;
  336.             public long IdReserva;//long
  337.             public long IdValija;//long
  338.             public int IdEstadoPedido;
  339.             public string notas;
  340.             //Fecha_Grabacion
  341.         }
  342.  
  343.         private void button4_Click(object sender, EventArgs e)
  344.         {
  345.             RecogerXML();
  346.             GetCampos_PedidoTienda();
  347.             InsertPedidosTotalOracle();
  348.  
  349.  
  350.             this.Close();
  351.  
  352.         }
  353.     }
  354. }
  355.  
  356.  

+Onis

  • Nuevo Miembro
  • *
  • Mensajes: 12
    • Ver Perfil
Re:DataSet?
« Respuesta #1 en: Miércoles 31 de Agosto de 2011, 09:24 »
0
En el titulo del post , indique DATASET,,,,queria decir DATATABLE..

Gracias.