Oracle
 sql >> Base de données >  >> RDS >> Oracle

Renvoie sys_refcursor de l'oracle en c#

Y a-t-il une raison pour laquelle vous n'utilisez pas une fonction au lieu d'une procédure ?

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;

Ensuite, en C#, vous devez le remplacer par ceci :

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

Lorsque vous exécutez da.Fill(ds); puis la fonction est exécutée, c'est-à-dire en utilisant cmd.ExecuteNonQuery(); exécute la fonction deux fois.

Quoi qu'il en soit, pour une procédure, la bonne méthode devrait être celle-ci :

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