Oracle
 sql >> Database >  >> RDS >> Oracle

Restituisce sys_refcursor dell'oracolo a c#

C'è un motivo per cui non usi una funzione al posto della procedura?

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;

Quindi in C# devi cambiarlo in questo:

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

Quando esegui da.Fill(ds); quindi viene eseguita la funzione, ovvero utilizzando cmd.ExecuteNonQuery(); esegue la funzione due volte.

Ad ogni modo, per una procedura la strada giusta dovrebbe essere questa:

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