IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

C# Discussion :

récupérer le code retour d'une procédure stockée


Sujet :

C#

  1. #1
    Membre habitué
    Avatar de Peanut
    Profil pro
    Inscrit en
    Décembre 2003
    Messages
    410
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2003
    Messages : 410
    Points : 147
    Points
    147
    Par défaut récupérer le code retour d'une procédure stockée
    Hello,

    j'appelle une procédure stockée (complexe, pas un simple insert & cie) et j'aimerais récupérer une valeur de retour (code erreur déterminé dans la procédure stockée).

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    ALTER PROCEDURE [dbo].[ma_proc]  
    	...
    	@CODE_RETOUR integer OUTPUT
    AS
    	...
    SELECT @CODE_RETOUR = 666
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
                        SqlCommand sqlCmdImportAppli = new SqlCommand();
                        sqlCmdImportAppli.CommandType = CommandType.StoredProcedure;
                        sqlCmdImportAppli.CommandText = "[ma_proc]";
                        sqlCmdImportAppli.Connection = ConnexionBD;
                        ...
                        SqlParameter sqlPrmCodRet = sqlCmdImportAppli.Parameters.Add("CODE_RETOUR", SqlDbType.Int);
                        sqlPrmCodRet.Direction = ParameterDirection.ReturnValue;
     
                            int ret = sqlCmdImportAppli.ExecuteNonQuery();
                            int codErr = Convert.ToInt32(sqlCmdImportAppli.Parameters["CODE_RETOUR"].Value);
    Mais ret vaut -1 : ça ne me choque pas, vu qu'apparemment c'est censé retourner un "nombre de lignes affectées", ce qui n'a pas de sens ici.

    Mais codErr vaut 0, et pas 666 comme attendu.

    Quelqu'un peut m'aider ? Je ne trouve rien à ce sujet sur le net.

  2. #2
    Inactif  
    Homme Profil pro
    Chef de projet NTIC
    Inscrit en
    Janvier 2007
    Messages
    6 604
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 62
    Localisation : France

    Informations professionnelles :
    Activité : Chef de projet NTIC

    Informations forums :
    Inscription : Janvier 2007
    Messages : 6 604
    Points : 13 314
    Points
    13 314
    Par défaut
    Je pense qu'ici l'utilisation de ExecuteScalar au lieu de ExecuteNonQuery devrait permettre de récupérer le code de retour.

    Je ne réponds pas aux questions techniques par MP ! Le forum est là pour ça...


    Une réponse vous a aidé ? utiliser le bouton

    "L’ennui dans ce monde, c’est que les idiots sont sûrs d’eux et les gens sensés pleins de doutes". B. Russel

  3. #3
    Membre habitué
    Avatar de Peanut
    Profil pro
    Inscrit en
    Décembre 2003
    Messages
    410
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2003
    Messages : 410
    Points : 147
    Points
    147
    Par défaut
    Merci, j'ai essayé, alors 3 choses :

    1. quand je fais
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    int ret2 = (int)sqlCmdImportAppli.ExecuteScalar();
    ça me retourne la valeur d'une variable qui existe effectivement quelquepart dans la procédure, mais pas du tout la valeur de @CODE_RETOUR.

    2. je me suis aperçu que si je supprime la valeur par défaut, l'exception
    La procédure ou fonction 'sps_AuchanImportApplications' attend le paramètre '@CODE_RETOUR', qui n'a pas été fourni.
    est levée sur le ExecuteNonQuery() !
    Peut-être un problème de passage de paramètre en fait plutôt, non ?

    3. (peut-être en rapport avec le 2.) à quoi servent les @ dans le code c# ? sont-ils obligatoires ?

  4. #4
    Membre habitué
    Avatar de Peanut
    Profil pro
    Inscrit en
    Décembre 2003
    Messages
    410
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2003
    Messages : 410
    Points : 147
    Points
    147
    Par défaut
    PAUSE
    Y'a probablement un bug dans le code de la proc (faut que je la lise en détail, je ne la connais pas...). Je reviens si c'est dans le code c# le problème.

  5. #5
    Membre habitué
    Avatar de Peanut
    Profil pro
    Inscrit en
    Décembre 2003
    Messages
    410
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2003
    Messages : 410
    Points : 147
    Points
    147
    Par défaut
    J'ai remplacé le
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    SELECT @CODE_RETOUR = 666
    par
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    set @CODE_RETOUR = 666
    RETURN @CODE_RETOUR
    et ça a l'air de marcher.

    Par contre j'ai mis des @ partout devant les noms de variables en c#, et je ne sais pas s'il faut ou non ?

    Et surtout : ça ne fonctionne pas (paramètre manquant) si je ne mets pas de valeur par défaut à la déclaration de @CODE_RETOUR :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    @CODE_RETOUR integer = 0 OUTPUT
    Même un
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    sqlPrmCodRet.Value = 0;
    n'est pas accepté.
    C'est normal ?

Discussions similaires

  1. Réponses: 2
    Dernier message: 22/02/2013, 15h24
  2. Réponses: 7
    Dernier message: 28/10/2010, 21h55
  3. Réponses: 1
    Dernier message: 19/03/2008, 11h01
  4. récupérer le code source d'une procédure stockée
    Par mike00 dans le forum VB 6 et antérieur
    Réponses: 21
    Dernier message: 13/06/2007, 11h31
  5. [2000] Récupérer la valeur de retour d'une procédure stockée
    Par drinkmilk dans le forum MS SQL Server
    Réponses: 5
    Dernier message: 25/08/2006, 09h46

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo