Mostrando entradas con la etiqueta XML. Mostrar todas las entradas
Mostrando entradas con la etiqueta XML. Mostrar todas las entradas

martes, 27 de agosto de 2019

C# Insertar fichero XML en Oracle



Requisitos:
IDE: Visual Studio 2005 .NET
Base de datos: Oracle



Paso 1: Creación aplicación escritorio

  • Vamos crear la siguiente interfaz.


  •        Cargar fichero XML.
     Vamos a mostrar el código del botón “Cargar”.
        private void btCargar_Click(object sender, EventArgs e)
        {
            openFileDialog1.Filter = "Archivos XML | *.xml";
            openFileDialog1.Multiselect = false;
            openFileDialog1.ShowDialog();

            // Mostramos valor en el textbox
            txtRuta.Text = openFileDialog1.FileName;
        }

  • Llamada procedimiento almacenado (botón "Generar")
        private void btGenerar_Click(object sender, EventArgs e)
        {
            if (openFileDialog1.FileName.Trim() != "")
            {

                // Objeto deconexión
                OracleConnection conn = new OracleConnection();

                try
                {                
                    conn.ConnectionString = "TuCadenaConexiónBD";

                    String procedimiento = "MIESQUEMA.PG_XML.PR_XML_TO_TABLE";

                    OracleCommand command = new OracleCommand();
                    command.Connection = conn;

                    command.CommandText = procedimiento;
                    command.CommandType = CommandType.StoredProcedure;

                    // Parametro XML
                    XmlDocument xmlDoc = new XmlDocument();
                    string ruta = openFileDialog1.FileName;
                    xmlDoc.Load(ruta);

                    string xml = xmlDoc.OuterXml;

                    OracleParameter param1 = new OracleParameter();
                    param1.OracleType = OracleType.Clob;
                    param1.Direction = ParameterDirection.Input;
                    param1.ParameterName = "pXmlContent";

                    param1.Value = xml;

                    command.Parameters.Add(param1);

                    // Parametros Salida Resultado
                    OracleParameter param2 = new OracleParameter();
                    param2.OracleType = OracleType.VarChar;
                    param2.Size = 500;
                    param2.Direction = ParameterDirection.InputOutput;
                    param2.ParameterName = "pResultado";
                    param2.Value = "";

                    command.Parameters.Add(param2);


                    conn.Open();
                    int exito = command.ExecuteNonQuery();

                    // Todo bien
                    if (exito == 1)
                    {
                        MessageBox.Show("Resultado: " + command.Parameters["pResultado"].Value.ToString());
                    }
                }
                catch (Exception ex)
                {
                    MessageBox.Show("ERROR: " + ex.Message.ToString());
                }
                finally
                {
                    // Cerramos Conexión
                    conn.Close();
                }
            }
            else
            {
                MessageBox.Show("No se ha seleccionado ningun fichero.");
            }
        }

NOTA: La variable "TuCadenaConexiónBD" se debe remplazar por tu cadena de conexión a la Base de datos.


Paso 2: Procedimiento para inserción del XML

  • Para ello hemos creado dentro de nuestra base de datos el paquete "PG_XML" y el procedimiento "PR_XML_TO_TABLE". Este procedimiento insertara el XML en la tabla “XML_TABLE”.
CREATE OR REPLACE PACKAGE BODY MIESQUEMA."PG_XML" 
AS

PROCEDURE PR_XML_TO_TABLE(
    pXmlContent IN CLOB, 
    pResultado  OUT VARCHAR2 
) 
IS

BEGIN
   
    INSERT INTO XML_TABLE 
    VALUES (SYSDATE, 9999, XMLTYPE(pXmlContent));

    pResultado := 'OK';
    
EXCEPTION 
    WHEN OTHERS THEN
        ROLLBACK;
        pResultado :=  'ERROR EN PG_XML.PR_XML_TO_TABLE: ' || SQLERRM;

END PR_XML_TO_TABLE;

END PG_XML;
/

Paso 3: Creación XML

    41975980Z
    Manuel
    Cruz
    Pérez
    617841085




Código fuente: aqui

jueves, 19 de febrero de 2015

C# Generar XML listado archivos



A continuación vamos realizar un programa para generar un XML que contendrá todos los archivos del árbol de directorios de una ruta que especifiquemos. Lo primero vamos a realizar la parte grafica quedando de la siguiente manera la interfaz.


Como se ve la interfaz es bastante simple contaremos de la parte superior donde pondremos la ruta desde donde se comenzara  a leer para generar el XML y la parte inferior tendremos en botón desde donde lanzaremos la acción y también tenemos un check para marcar si deseamos que en el XML también se incluyan los subdirectorios. También vemos que hemos añadido un “folderBrowserDialog “para poder así también seleccionar nuestro directorio.
Vamos comenzar con el botón del evento “click” del botón “Examinar” desde el cual podremos elegir una ruta.


        private void btoExaminar_Click(object sender, EventArgs e)
        {
            folderBrowserDialog1.ShowDialog();
            txtRuta.Text = folderBrowserDialog1.SelectedPath;

        }

Bueno lo único que realizamos aquí es mostrar nuestro “openFileDialog” para mostrar la ventana para elegir nuestro directorio.

Ahora vamos a los realmente importante la función que va generar el XML.

        private void generaXML(string ruta, bool subDir)
        {

            // Inicilizamos en XML
            XmlWriterSettings settings = new XmlWriterSettings();
            settings.Indent = true;
            settings.IndentChars = ("    ");
            writer = XmlWriter.Create("Listado.xml");

            // XML
            System.IO.DirectoryInfo Directorio = new DirectoryInfo(txtRuta.Text);
            writer.WriteStartElement("arbol");
            // Función para recorrer todo el arbol
            RecorreArbol(Directorio, true);
            writer.WriteEndElement();
            writer.Flush();
            writer.Close();
           
            // Mensaje finalizacion
            MessageBox.Show("Completado!");
        }


Y el procedimiento para recorrer el árbol.


        private void RecorreArbol(System.IO.DirectoryInfo directorio, bool subDirectorios)
        {
            System.IO.FileInfo[] files = null;
            System.IO.DirectoryInfo[] subDirs = null;

            // Obtenemos todos los archivos que se encuentra en directorio
            try
            {
                files = directorio.GetFiles("*.*");
            }
            // En caso de error
            catch (Exception e)
            {
                MessageBox.Show("Error: " + e.Message);
            }

            // Si tenemos ficheros los recorremos y los agregamos a nuestro XML
            if (files != null)
            {
               
                foreach (System.IO.FileInfo fi in files)
                {
                    writer.WriteStartElement("archivo");
                    writer.WriteElementString("nombre", fi.Name.ToString());
                    writer.WriteElementString("tamaño", fi.Length.ToString());
                    writer.WriteElementString("utimoAcceso", fi.LastAccessTime.ToString());
                    writer.WriteElementString("fechaCreacion", fi.CreationTime.ToString());
                    writer.WriteEndElement();

                }


                // Solo si lo tenemos activado
                if (subDirectorios)
                {
                    // Buscamos si tiene subdirectorios
                    subDirs = directorio.GetDirectories();

                    foreach (System.IO.DirectoryInfo dirInfo in subDirs)
                    {
                        // LLamada Recursiva
                        RecorreArbol(dirInfo, subDirectorios);
                    }
                }
            }
        }

Aquí tenéis un ejemplo de XML que genera.



Nota: Podéis descargar el proyecto desde aquí




jueves, 18 de abril de 2013

Windows 8 Metro – Leer archivo XML


Lo primero que aremos para realizar este ejemplo será diseñar una pequeña interfaz que tendrá un TextBlock y un botón. La lógica básica de la aplicación será que tendremos una caja de texto y botón y cuando pulsemos dicho botón no mostrara una frase que tengamos almacenada en nuestro caso tendremos dichas frases almacenas en un fichero XML. Vale este sería más o menos el diseño de dicha aplicación.


Vale agregaremos una nueva clase para tratar los datos que vamos a obtener de XML. Yo he llamado a esta clase “Frases”. Y esta es su definición:


Ahora vamos a crear nuestro fichero XML que contendrá los datos que vamos a mostrar. Para ello deberemos crear el documento dentro de la carpeta de proyecto llamada “Assets” y mi caso he llamado el fichero “frases.xml”.


Y he definido los datos dentro de mi fichero XML de la siguiente manera:


Ya casi hemos terminado ahora nos  iremos a nuestra pantalla y le agregaremos una función que lo que hará es devolvernos una frase aleatoria que tengamos almacenada en nuestro fichero XML  antes de definir la función deberemos agregar dos referencias a nuestra clase que son estas dos.


A continuación os muestro como ha quedado la función para obtener una frase aleatoria.


Finalmente solo tendremos que llamar a esta función en nuestro método “click” de nuestra ventana principal y listo. Estaría bien que implementéis un control de excepciones ya que se pueden producir a intentar abrir un archivo que no existe por ejemplo. No lo querido introducir para no añadir más código a la función.


Como siempre os dejo un vídeo de la aplicación funcionando, un saludo.