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)";