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

Signaler
Messages postés
10
Date d'inscription
samedi 22 mars 2003
Statut
Membre
Dernière intervention
3 septembre 2004
-
Messages postés
199
Date d'inscription
lundi 22 juillet 2002
Statut
Membre
Dernière intervention
14 juin 2006
-
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

Messages postés
199
Date d'inscription
lundi 22 juillet 2002
Statut
Membre
Dernière intervention
14 juin 2006

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,
Messages postés
10
Date d'inscription
samedi 22 mars 2003
Statut
Membre
Dernière intervention
3 septembre 2004

merci pour le tuyau ;-)

mais peux tu me donner un exemple stp

merci d'avance
Messages postés
199
Date d'inscription
lundi 22 juillet 2002
Statut
Membre
Dernière intervention
14 juin 2006

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,
Messages postés
1
Date d'inscription
mardi 7 septembre 2004
Statut
Membre
Dernière intervention
7 septembre 2004

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
Messages postés
199
Date d'inscription
lundi 22 juillet 2002
Statut
Membre
Dernière intervention
14 juin 2006

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