CLR: .Net / Mono / Boo / Otros CLR > C#
DataSet?
(1/1)
+Onis:
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# ---namespace TO_REC{ 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(); //Instanciamos el objeto de la estructura CabPedido CPedido = new CabPedido(); PedidoDetalle PDetalle = new PedidoDetalle(); private void RecogerXML() { XmlDocument doc1 = new XmlDocument(); SqlConnection cnn = new SqlConnection(cnnStrTPV); cnn.Open(); LoadXml1(cnn, doc1); cnn.Close(); doc1.Save("C:\\Users\\dnonis\\Desktop\\temp\\OutputXml1.xml"); } protected bool LoadXml1(SqlConnection cnn, XmlDocument doc1) { //Leemos el campo serialización(XML) de la bbdd. idtabla = 122;//pedidostiendas Id = //100019014084; //100163019855; 1001310122429; //100152014221; 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")); doc1.LoadXml(MiXml.Value); return true; } else { return false; } } } 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/dnonis/Desktop/temp/OutputXml1.xml");//ruta del archivo xml XmlNodeList pedidostiendas = xDoc.GetElementsByTagName("PedidoTienda");//idtabla=122-->PedidosTiendas foreach (XmlElement nodo in pedidostiendas) { CPedido.IdPedidoTienda = Convert.ToUInt64(nodo.GetElementsByTagName("IdPedidoTienda")[0].InnerText);//nodo xsi.nil CPedido.IdentidadOrigenPedido = Convert.ToInt32(nodo.GetElementsByTagName("IdEntidadOrigenPedido")[0].InnerText); CPedido.FechaPedido = nodo.GetElementsByTagName("FechaPedido")[0].InnerText; CPedido.CodigoBarras = nodo.GetElementsByTagName("CodigoBarras")[0].InnerText; CPedido.IdDivisa = Convert.ToInt32(nodo.GetElementsByTagName("IdDivisa")[0].InnerText); CPedido.IdTicket = nodo.GetElementsByTagName("IdTicket")[0].InnerText; CPedido.Comodin2 = nodo.GetElementsByTagName("Comodin2")[0].InnerText; CPedido.Comodin8 = nodo.GetElementsByTagName("Comodin8")[0].InnerText; CPedido.IdEmpleado = nodo.GetElementsByTagName("IdEmpleado")[0].InnerText; ListaPedidos.Add(CPedido); } XmlNodeList pedidostiendasDetalleCollection = xDoc.GetElementsByTagName("PedidoTiendaDetalleCollection"); XmlNodeList PedidoTiendaDetalle = ((XmlElement)pedidostiendasDetalleCollection[0]).GetElementsByTagName("PedidoTiendaDetalle"); foreach (XmlElement nodo1 in PedidoTiendaDetalle) { PDetalle.IdPedidoTienda1 = Convert.ToUInt64(nodo1.GetElementsByTagName("IdPedidoTienda")[0].InnerText); PDetalle.Linea = Convert.ToInt32(nodo1.GetElementsByTagName("Linea")[0].InnerText); PDetalle.IdTipoPedido = Convert.ToInt32(nodo1.GetElementsByTagName("IdTipoPedido")[0].InnerText); PDetalle.IdEntidadDestinoPedido = Convert.ToInt32(nodo1.GetElementsByTagName("IdEntidadDestinoPedido")[0].InnerText); PDetalle.FechaPrevistaEntregaEnTienda = nodo1.GetElementsByTagName("FechaPrevistaEntregaEnTienda")[0].InnerText; PDetalle.FechaEfectivaEntregaEnTienda = nodo1.GetElementsByTagName("FechaEfectivaEntregaEnTienda")[0].InnerText; PDetalle.IdArticuloVariante = nodo1.GetElementsByTagName("IdArticuloVariante")[0].InnerText; PDetalle.Unidades = nodo1.GetElementsByTagName("Unidades")[0].InnerText; PDetalle.UnidadesServidas = nodo1.GetElementsByTagName("UnidadesServidas")[0].InnerText; PDetalle.UnidadesCanceladas = nodo1.GetElementsByTagName("UnidadesCanceladas")[0].InnerText; PDetalle.PrecioVenta = nodo1.GetElementsByTagName("PrecioVenta")[0].InnerText; PDetalle.CodigoBarras = nodo1.GetElementsByTagName("CodigoBarras")[0].InnerText; PDetalle.IdPrioridadPedido = Convert.ToInt32(nodo1.GetElementsByTagName("IdPrioridadPedido")[0].InnerText); if (PDetalle.IdReserva == null) { PDetalle.IdReserva = Convert.ToUInt32(nodo1.GetElementsByTagName("IdReserva")[0].InnerText); } if (PDetalle.IdValija == null) { PDetalle.IdValija = Convert.ToUInt32(nodo1.GetElementsByTagName("IdValija")[0].InnerText); } if (PDetalle.IdEstadoPedido == null) { PDetalle.IdEstadoPedido = Convert.ToInt32(nodo1.GetElementsByTagName("IdEstadoPedido")[0].InnerText); } PDetalle.notas = nodo1.GetElementsByTagName("Observaciones")[0].InnerText; ListaPedidos.Add(PDetalle); } } public void InsertPedidosTotalOracle() { 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(); System.Data.OracleClient.OracleCommand MiComando2= new System.Data.OracleClient.OracleCommand(); /*OracleTransaction transaction1; OracleTransaction transaction2;*/ ////////------------------- System.Data.OracleClient.OracleParameter var1 = new System.Data.OracleClient.OracleParameter(); var1.OracleType = System.Data.OracleClient.OracleType.UInt32; if (CPedido.IdTicket == "") { var1.Value = Convert.ToUInt64(0); } else if (CPedido.IdTicket != "") { var1.Value = Convert.ToUInt64(CPedido.IdTicket); } else { var1.Value = Convert.ToUInt32(0); } ////////------------------- System.Data.OracleClient.OracleParameter var2 = new System.Data.OracleClient.OracleParameter(); var2.OracleType = System.Data.OracleClient.OracleType.Int32; if (CPedido.Comodin2 == "") { var2.Value = Convert.ToInt32(0); } else if (CPedido.Comodin2 != "") { var2.Value = Convert.ToInt32(CPedido.Comodin2); } else { var2.Value = Convert.ToUInt32(0); } ////////------------------- System.Data.OracleClient.OracleParameter var3 = new System.Data.OracleClient.OracleParameter(); var3.OracleType = System.Data.OracleClient.OracleType.UInt32; if (CPedido.IdEmpleado == "") { var3.Value = Convert.ToUInt64(0); } else if (CPedido.IdEmpleado != "") { var3.Value = Convert.ToUInt64(CPedido.IdEmpleado); } else { var3.Value = Convert.ToUInt32(0); } ////////------------------- System.Data.OracleClient.OracleParameter var4 = new System.Data.OracleClient.OracleParameter(); var4.OracleType = System.Data.OracleClient.OracleType.VarChar; if (PDetalle.FechaPrevistaEntregaEnTienda == "") { var4.Value = "null"; } else { var4.Value = Convert.ToDateTime(PDetalle.FechaPrevistaEntregaEnTienda); } ////////------------------- System.Data.OracleClient.OracleParameter var5 = new System.Data.OracleClient.OracleParameter(); var5.OracleType = System.Data.OracleClient.OracleType.VarChar; if (PDetalle.FechaEfectivaEntregaEnTienda == "") { var5.Value = "null"; } else { var5.Value = Convert.ToDateTime(PDetalle.FechaEfectivaEntregaEnTienda); } ////////------------------- MiComando.Parameters.Clear(); /* // Start a local transaction transaction2 = conn.BeginTransaction(IsolationLevel.ReadCommitted); // Assign transaction object for a pending local transaction MiComando2.Transaction = transaction2; */ try { string numTPV=Convert.ToString(CPedido.IdPedidoTienda); string numTPVsbtr= numTPV.Substring(7,2); //string numTicket = Convert.ToString(CPedido.IdTicket); //string numTicketsbtr = numTicket.Substring(10, (numTPV.Length)); string oracle = "Insert into TO_REC_PEDIDOS_TIENDAS_CAB" + "(CODIGO_EMPRESA,NUMERO_PEDIDO,TIENDA_ORIGEN,FECHA_PEDIDO,"+ "CODIGO_BARRAS_PEDIDO,CODIGO_DIVISA," + "NUMERO_TPV,NUMERO_TIQUET,CLIENTE_DESTINO,PEDIDO_ORIGINAL_XTRELA," + "CODIGO_TRABAJADOR,PERSONA_PEDIDO)" + "VALUES('1234D',"+CPedido.IdPedidoTienda+"," +CPedido.IdentidadOrigenPedido+ ",'"+ Convert.ToDateTime(CPedido.FechaPedido)+"','"+CPedido.CodigoBarras+"',"+CPedido.IdDivisa+ ","+ Convert.ToInt32(numTPVsbtr)+","+var1.Value+",'EJEMPLO',"+ var2.Value+","+var3.Value+",'"+CPedido.Comodin8+"')"; string oracle_= "Insert into TO_REC_PEDIDOS_TIENDAS_LIN" + "(CODIGO_EMPRESA,NUMERO_PEDIDO,NUMERO_LINEA,TIPO_PEDIDO," + "CLIENTE_DESTINO,FECHA_ENTREGA_PREVISTA,FECHA_ENTREGA_REAL,"+ "CODIGO_ARTICULO,UNIDADES_PEDIDAS,UNIDADES_SERVIDAS,UNIDADES_CANCELADAS,"+//,"+ "PRECIO_VENTA,CODIGO_BARRAS_SOBRE,PRIORIDAD_PEDIDO,"+ "NUMERO_RESERVA,NUMERO_VALIJA,STATUS_PEDIDO,"+ "OBSERVACIONES)"+ "VALUES('1234D',"+PDetalle.IdPedidoTienda1+","+PDetalle.Linea+",'"+ PDetalle.IdTipoPedido+"','"+PDetalle.IdEntidadDestinoPedido+"','"+ var4.Value+"','"+var5.Value+"','"+ PDetalle.IdArticuloVariante+"','"+(PDetalle.Unidades)+"','"+ (PDetalle.UnidadesServidas)+"','"+(PDetalle.UnidadesCanceladas)+"','"+ PDetalle.PrecioVenta+"','"+PDetalle.CodigoBarras+"',"+PDetalle.IdPrioridadPedido+","+ PDetalle.IdReserva+","+PDetalle.IdValija+","+ PDetalle.IdEstadoPedido+","+PDetalle.notas+")"; MiComando = new OracleCommand(oracle, conn); MiComando.ExecuteNonQuery(); MiComando2 = new OracleCommand(oracle_, conn); MiComando2.ExecuteNonQuery(); //transaction2.Commit(); MessageBox.Show("Ejecución realizada con éxito", "INFO", MessageBoxButtons.OK, MessageBoxIcon.Information); } catch (Exception err) { //transaction2.Rollback(); MessageBox.Show("Error..." + err.Message, "ERROR", MessageBoxButtons.OK, MessageBoxIcon.Error); MessageBox.Show("Para más información consulte con su Administrador"); } conn.Close();//--cerramos conexión this.Close();//cerramos y salimos de la aplicación } public class CabPedido //--> .:Oracle:. "TO_REC_PEDIDOS_TIENDAS_CAB" { //Codigo_Empresa public ulong IdPedidoTienda; public int IdentidadOrigenPedido; public string FechaPedido; public string CodigoBarras; public int IdDivisa;//tinyint public string IdTicket;//bigint //cliente_destino public string Comodin2; public string Comodin8;//nvarchar(100) public string IdEmpleado;//bigint //Fecha_Grabacion } public class PedidoDetalle //--> "TO_REC_PEDIDOS_TIENDAS_LIN" { //Codigo_Empresa public ulong IdPedidoTienda1; public ulong IdPedidoTiendaDetalle;//¿¿?? public int Linea; public int IdTipoPedido; public int IdEntidadDestinoPedido; public string FechaPrevistaEntregaEnTienda;//DATETIME public string FechaEfectivaEntregaEnTienda;//DATETIME //fecha real de entrega a cliente public string IdArticuloVariante; public string Unidades;//Numeric(11,4) public string UnidadesServidas;//Numeric(11,4) public string UnidadesCanceladas;//Numeric(11,4) public string PrecioVenta;//money public string CodigoBarras; public int IdPrioridadPedido; public long IdReserva;//long public long IdValija;//long public int IdEstadoPedido; public string notas; //Fecha_Grabacion } private void button4_Click(object sender, EventArgs e) { RecogerXML(); GetCampos_PedidoTienda(); InsertPedidosTotalOracle(); this.Close(); } }}
+Onis:
En el titulo del post , indique DATASET,,,,queria decir DATATABLE..
Gracias.
Navegación
Ir a la versión completa