jueves, 3 de enero de 2013

.NET obtener cursor desde Oracle desde un procedimiento almacenado


Vamos a mostrar cómo podemos obtener los datos de un cursor de Oracle a nuestra aplicación .Net llamando desde nuestra aplicación a un procedimiento almacenado de Oracle.

Lo primero será crear el procedimiento almacenado para ello he creado el paquete.


Primero será declarar nuestro nuestro nuevo tipo de dato en el paquete que será un cursor dinámico.

TYPE RstCur IS REF CURSOR;

Ahora la especificación del paquete declararemos el procedimiento. Este procedimiento tendrá como argumento de entrada un nombre y como salida un cursor dinámico. El procedimiento devolverá todos los residentes con el nombre introducido.
La declaración del procedimiento quedaría así:

CREATE OR REPLACE PACKAGE DAVID.PG_RESIDENTES AS
/******************************************************************************
   NAME:       PG_RESIDENTES
   PURPOSE:

   REVISIONS:
   Ver        Date        Author           Description
   ---------  ----------  ---------------  ------------------------------------
   1.0        31/12/2012      David       1. Created this package.
******************************************************************************/
TYPE RstCur IS REF CURSOR;

  PROCEDURE ObtenResidente(pNombre   IN  VARCHAR2,
                           MiCursor  OUT RstCur);

END PG_RESIDENTES;
/


Y  el cuerpo del procedimiento así.

CREATE OR REPLACE PACKAGE BODY DAVID.PG_RESIDENTES AS
/******************************************************************************
   NAME:       PG_RESIDENTES
   PURPOSE:

   REVISIONS:
   Ver        Date        Author           Description
   ---------  ----------  ---------------  ------------------------------------
   1.0        31/12/2012      David       1. Created this package body.
******************************************************************************/

PROCEDURE ObtenResidente(pNombre   IN VARCHAR2,
                         MiCursor  OUT RstCur)
IS
   
BEGIN
  
   OPEN  MiCursor FOR
       SELECT DNI, NOMBRE, APELLIDO1 AS , APELLIDO2
       FROM RESIDENTES
       WHERE  UPPER(RESIDENTES.NOMBRE) = UPPER(pNombre);  

END ObtenResidente;
 

END PG_RESIDENTES;
/

Ahora que ya tenemos el procedimiento almacenado creado vamos a crear una pequeña  aplicación en .Net para llamarlo y mostrar los datos.




Ahora  la lógica del botón buscar.

        private void button1_Click(object sender, EventArgs e)
        {
           
            OracleCommand comando;
            OracleDataAdapter Da;
            DataSet MyDataSet = new DataSet();

            comando = new OracleCommand("PG_RESIDENTES.ObtenResidente", conn);
            comando.CommandType = CommandType.StoredProcedure;

            // Abrimos conexión
            if (conn.State == 0) conn.Open();

            OracleCommandBuilder.DeriveParameters(comando);

            // Le pasamos los parametros
            comando.Parameters[0].Value  = txtNombre.Text; // Nombre
            comando.Parameters[1].Value = null;

            // Ejecutamos y llenamo Ds
            Da = new OracleDataAdapter(comando);
            Da.Fill(MyDataSet);

            // Cerrar conex
            conn.Close();

            // Añadimos los datos al datagridview
            dataGridView1.DataSource = MyDataSet.Tables[0];

        }

Capturas de la aplicación funcionando.



No hay comentarios:

Publicar un comentario