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

No hay comentarios:

Publicar un comentario