Comment faire pour retourner un RefCursor à partir d'Oracle?

Je suis en train d'exécuter un définis par l'utilisateur Oracle une fonction qui retourne un RefCursor à l'aide de ODP.NET. Voici la fonction:

CREATE OR REPLACE FUNCTION PKG.FUNC_TEST (ID IN TABLE.ID%type)
   RETURN SYS_REFCURSOR
AS
   REF_TEST   SYS_REFCURSOR;
BEGIN
   OPEN REF_TEST FOR
      SELECT   *
        FROM   TABLE;
   RETURN REF_TEST;
END;
/

Je peux appeler cette fonction en Crapaud (sélectionnez func_test(7) à partir du double) et de revenir à un CURSEUR. Mais j'ai besoin de pour obtenir le curseur à l'aide de C# et ODP.NET remplir un DataSet, mais je reçois une NullReferenceException - "la référence d'Objet n'est pas définie à une instance d'un objet". Voici ce que j'ai:

OracleConnection oracleCon = new OracleConnection(ConfigurationManager.ConnectionStrings["MyConnectionString"].ConnectionString);
OracleCommand sqlCom = new OracleCommand("select func_test(7) from dual", oracleCon);
sqlCom.Parameters.Add("REF_TEST", OracleDbType.RefCursor, ParameterDirection.ReturnValue);
OracleDataAdapter dataAdapter = new OracleDataAdapter();
dataAdapter.SelectCommand = sqlCom;

DataSet dataSet = new DataSet();
dataAdapter.Fill(dataSet);  //FAILS HERE with NullReferenceException

J'ai été en mesure de trouver beaucoup d'informations et d'exemples sur l'utilisation de procédures stockées et de ODP.NET mais pas autant pour le retour RefCursors de fonctions.

EDIT: je ne veux pas ajouter explicitement les paramètres d'entrée de l'objet OracleCommand (c'est à dire sqlCom.Parameters.Add("id", OracleDbType.Int32,ParameterDirection.Input).Value = 7;) qui le rend difficile à mettre en œuvre ce qu'un générique du service web RESTful, mais je suis réservant que mon dernier recours, mais permettrait d'utiliser des procédures stockées à la place.

Toute aide est très appréciée!

Vous êtes en train d'ajouter un paramètre, mais vous êtes en cours d'exécution comme une requête; ne voulez-vous pas faire quelque chose comme :REF_TEST := func_test(7)?
Vous ne savez pas où l'utilisation de ce. Est-ce utilisé à la place du paramètre?
comme le OracleCommand chaîne, au lieu de le sélectionner. (Je devrais peut-être signaler que je ne sais rien à propos de ODP.Net mais qui a toujours l'air de mal *8-)
Alex, pas de chance avec ça. J'apprécie l'essayer 🙂

OriginalL'auteur Gady | 2010-11-08