sql >> Base de Datos >  >> RDS >> Oracle

Devuelve sys_refcursor del oráculo a c#

¿Hay alguna razón por la que no utilice una función en lugar de un procedimiento?

CREATE OR REPLACE FUNCTION ListadoClientes() RETURN sys_refcursor
IS 
resul Sys_refcursor;
BEGIN 
  OPEN resul for select ID ,NOMBRES ,APELLIDOS ,CEDULA ,DIRECCION ,TELEFONO  
  from cliente; 
  RETURN resul;
END ListadoClientes;

Luego en C# debes cambiarlo a esto:

cmd.Parameters.Add("resul", OracleDbType.RefCursor, ParameterDirection.ReturnValue);

Cuando ejecuta da.Fill(ds); luego se ejecuta la función, es decir, usando cmd.ExecuteNonQuery(); ejecuta la función dos veces.

De todos modos, para un trámite la forma correcta debería ser esta:

cmd.CommandText = "ListadoClientes(:resul)";