Appel a une procédure stockée ado.net OleDb Oracle

kikoff Messages postés 10 Date d'inscription samedi 22 mars 2003 Statut Membre Dernière intervention 3 septembre 2004 - 2 sept. 2004 à 16:51
Trinita16 Messages postés 199 Date d'inscription lundi 22 juillet 2002 Statut Membre Dernière intervention 14 juin 2006 - 7 sept. 2004 à 21:02
je veux acceder a une procedure stokee sur oracle
pour ça j'utilise OleDb

et mon code est le suivant :

public string GetCardynVal(int vid_obj,string vchamp,int vnumcls)
{
string req = "shapp.CARDYN_GETVAL";
oleDbCommandCardynGetVal.CommandText = req;
oleDbCommandCardynSetVal.CommandType = System.Data.CommandType.StoredProcedure;

OleDbParameter prm_vid_obj = this.oleDbCommandCardynGetVal.Parameters.Add("vid_obj",OleDbType.UnsignedBigInt);
prm_vid_obj.Direction = ParameterDirection.Input;
prm_vid_obj.Value = vid_obj;

OleDbParameter prm_vchamp = this.oleDbCommandCardynGetVal.Parameters.Add("vchamp",OleDbType.LongVarChar);
prm_vchamp.Direction = ParameterDirection.Input;
prm_vchamp.Value = vchamp;

OleDbParameter prm_vnumcls = this.oleDbCommandCardynGetVal.Parameters.Add("vnumcls",OleDbType.UnsignedBigInt);
prm_vnumcls.Direction = ParameterDirection.Input;
prm_vnumcls.Value = vnumcls;

OleDbParameter prm_val = this.oleDbCommandCardynGetVal.Parameters.Add("RETURN_VALUE",OleDbType.LongVarChar);
prm_val.Direction = ParameterDirection.Output;

oleDbCommandCardynGetVal.Connection.Open();

oleDbCommandCardynGetVal.ExecuteNonQuery();

val = oleDbCommandCardynGetVal.Parameters["RETURN_VALUE"].Value.ToString();

oleDbCommandCardynGetVal.Connection.Close();

return val;

}

et m'as procedure est :

PROCEDURE cardyn_getval
(
vid_obj IN BINARY_INTEGER, /* Idl de l'objet */
vchamp IN VARCHAR2, /* Libelle de caractéristique */
vnumcls IN BINARY_INTEGER, /* Classe de l'objet */
vvaleur OUT VARCHAR2
) IS

BEGIN
vvaleur := cardyn_getval (vid_obj, vchamp, vnumcls); /* cardyn_getval Function PL/SQL
END cardyn_getval;

Le grand soucis c'est que la fonction sous c# me renvoit toujours un string val vide !!!
j'ai teste la procedure sous sql plus

par cette commande

DECLARE
vvaleur VARCHAR2(255);
BEGIN

shapp.cardyn_getval (98, 'Nom', 1000, vvaleur);

raise_application_error(-20000, 'Valeur du champ Nom = "' || vvaleur || '"');

END;
/

----> ORA-20000: Valeur du champ Nom = "Q5/"
et là ça marche !!!

je n'y comprend plus rien

merci pour votre aide , vos remarques

merci d'avance ;-)

5 réponses

Trinita16 Messages postés 199 Date d'inscription lundi 22 juillet 2002 Statut Membre Dernière intervention 14 juin 2006
3 sept. 2004 à 08:58
petite précision si tu fais
oleDbCommandCardynGetVal.ExecuteNonQuery();
cela te retourne le resultat d'éxécution de la requête utilise plutôt reader

OledbReader

Bon Coding

8-) :-p

Trinita,
0
kikoff Messages postés 10 Date d'inscription samedi 22 mars 2003 Statut Membre Dernière intervention 3 septembre 2004
3 sept. 2004 à 22:23
merci pour le tuyau ;-)

mais peux tu me donner un exemple stp

merci d'avance
0
Trinita16 Messages postés 199 Date d'inscription lundi 22 juillet 2002 Statut Membre Dernière intervention 14 juin 2006
6 sept. 2004 à 13:44
petit erreur, c'est oledbdatareader ( oups )

sinon voila un exemple :

public void ReadMyData(string myConnString)
{
string mySelectQuery = "SELECT OrderID, CustomerID FROM Orders";
OleDbConnection myConnection = new OleDbConnection(myConnString);
OleDbCommand myCommand = new OleDbCommand(mySelectQuery,myConnection);
myConnection.Open();
OleDbDataReader myReader;
myReader = myCommand.ExecuteReader();
// Always call Read before accessing data.
while (myReader.Read()) {
Console.WriteLine(myReader.GetInt32(0) + ", " + myReader.GetString(1));
}
// always call Close when done reading.
myReader.Close();
// Close the connection when done with it.
myConnection.Close();
}

cet exemple est directement tiré de la documentation du sdk .net

Elle est pour ma part bien faite essai de la consulter

Mais si tu as toujours un problème je reste à dispo

Bonne Prog @+

8-) :-p

Trinita,
0
cs_coralie88 Messages postés 1 Date d'inscription mardi 7 septembre 2004 Statut Membre Dernière intervention 7 septembre 2004
7 sept. 2004 à 19:05
Je suis intriguée. Pourquoi ne te sers tu pas des objets Oracle.DataAccess.Client.OracleConnection , Oracle.DataAccess.Client.OracleDataReader pour accéder à ta bd dans Oracle.

Salut
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
Trinita16 Messages postés 199 Date d'inscription lundi 22 juillet 2002 Statut Membre Dernière intervention 14 juin 2006
7 sept. 2004 à 21:02
c'est vrai que l'on peut utiliser Oracle.DataAccess.Client.OracleDataReader

mais le fond reste le même ....

A chacun de voir

PS : Bonne remarque

8-) :-p

Trinita,

(Nous savons tous lire, alors passons un peu de temps sur les documentations. Pensons aux personnes qui les rédigent :big) ;) )
0
Rejoignez-nous