Gibt es einen Grund, warum Sie keine Funktion anstelle einer Prozedur verwenden?
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;
Dann müssen Sie es in C# wie folgt ändern:
cmd.Parameters.Add("resul", OracleDbType.RefCursor, ParameterDirection.ReturnValue);
Wenn Sie da.Fill(ds);
ausführen dann wird die Funktion ausgeführt, also mit cmd.ExecuteNonQuery();
führt die Funktion zweimal aus.
Wie auch immer, für eine Prozedur sollte der richtige Weg dieser sein:
cmd.CommandText = "ListadoClientes(:resul)";