Exécution d'une procédure stocké

Résolu
cs_mathmax Messages postés 403 Date d'inscription vendredi 28 octobre 2005 Statut Membre Dernière intervention 31 août 2008 - 26 sept. 2006 à 23:10
cs_mathmax Messages postés 403 Date d'inscription vendredi 28 octobre 2005 Statut Membre Dernière intervention 31 août 2008 - 28 sept. 2006 à 02:52
Bonjour,

Je souhaite lancer depuis c# l'execution d'une procédure stockée. J'utilise la méthode ExecuteNonQuery().

Voici le code de ma procédure stocké :

CREATE PROCEDURE dbo.getidemploye @myid char(36) OUTPUT
AS
SET @myid = NEWID()

en fait j'ai une table employes dont la clé est générée pour chaque employé avec NEWID(). La procédure stocké à pour but de renvoyer une nouvelle valeur pour une clé (généré par newid()).
Le problème que j'ai est le suivant :
Je souhaite ajouter un enregistrement à mon dataset. L'ajout de la clé se fait par l'appel à la procédure stockée de cette façon :

                MaConnection.Open();
                MaProcedureStocke.ExecuteNonQuery();
                MaConnection.Close();
                e.Row["numero"] = MaProcedureStocke.Parameters["@myid"].Value.ToString();

Mais j'obtiens le message suivant :
Procedure or Function 'getidemploye' expects parameter '@myid', which was not supplied.

Visiblement ma procédure stocké attend un paramètre mais je ne sais ni comment lui envoyer ni quoi lui envoyer. Pouvez-vous m'aider ?

Mathmax

2 réponses

sebmafate Messages postés 4936 Date d'inscription lundi 17 février 2003 Statut Membre Dernière intervention 14 février 2014 38
27 sept. 2006 à 09:56
il faut le déclarer avant l'appel à ExecuteNonQuery()

DbParameter param = MaProcedureStocke.Parameters.CreateParameter();
param.Name = "@myid";
param.DbType = DbType.Int;
param.Directory = DbDirectory.Output;
...

MaProcedureStocke.Parameters.Add(param);

MaProcedureStocke.ExecuteNonQuery();

Sébastien FERRAND (
blog)
Consultant Indépendant
[Microsoft MVP Visual C#]
3
cs_mathmax Messages postés 403 Date d'inscription vendredi 28 octobre 2005 Statut Membre Dernière intervention 31 août 2008
28 sept. 2006 à 02:52
Merci beaucoup ! Ca marche parfaitement (à quelques modifications près de ton code). Voici le code que j'ai utilisé :

                DbParameter param = MaProcedureStocke.CreateParameter();
                param.ParameterName = "@myid";
                param.DbType = DbType.StringFixedLength;
                param.Size = 36;
                param.Direction = ParameterDirection.Output;
               
                MaProcedureStocke.Parameters.Add(param);

Mathmax
0