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”.
1
2
3
4
5
6
7
8
9
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")
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
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”.
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
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
1
2
3
4
5
6
7
<empleado>
    <dni>41975980Z</dni>
    <nombre>Manuel</nombre>
    <apellido1>Cruz</apellido1>
    <apellido2>Pérez</apellido2>
    <telefono>617841085</telefono>
</empleado>


Código fuente: aqui

No hay comentarios:

Publicar un comentario