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 :

[c#] Procédure stockée


Sujet :

C#

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre éclairé
    Profil pro
    Inscrit en
    Février 2009
    Messages
    625
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2009
    Messages : 625
    Par défaut [c#] Procédure stockée
    Bonsoir,
    j'ai du mal à utiliser les procédures stockées.

    Dans cette exemple je dois retourner une liste de format FOR_ID et FOR_NOM
    mais dans un sqlserver j'ai un soucis...

    exemple de retour:

    carte publicitaire 5
    flyer 6

    Sur sqlserver:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    create procedure  SP_FORMAT
    (@produit int , @nom char(50) output, @id int output)
    as
    select distinct(for_nom), for_id from refpf, forma where refpf_for=for_id AND refpf_pro=@produit
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    exec SP_FORMAT 3
     
    Serveur : Msg 201, Niveau  16, État 4, Procédure SP_FORMAT, Ligne 0
    La procédure 'SP_FORMAT' attend le paramètre '@nom', qui n'a pas été fourni.
    Dans mon application c#:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
     
                string strProcedureStockee = "SP_FORMAT";
                SqlCommand MonFormat = new SqlCommand(strProcedureStockee, MaConnexion);
                MonFormat.CommandType = CommandType.StoredProcedure;
     
                MonFormat.Parameters.Add("@id_produit", SqlDbType.Int);
                MonFormat.Parameters.Add("@nom_format", SqlDbType.Char);
                MonFormat.Parameters.Add("@id_format", SqlDbType.Int);
     
                MonFormat.Parameters[0].Direction = ParameterDirection.Input;
                MonFormat.Parameters[0].Value = comboBox_pro_produit.ValueMember;
     
                /* ICI JE COMPRENDS PAS CE QUIL FAUT METTRE */
                MonFormat.Parameters[1].Direction = ParameterDirection.InputOutput;
                MonFormat.Parameters[2].Direction = ParameterDirection.InputOutput;
     
                MonFormat.ExecuteNonQuery();
    Comment faire pour réussir à obtenir les deux variables ? sachant que c'est des listes en faite...


    Merci de m'aider, c'est sympa !

  2. #2
    Expert éminent Avatar de Pol63
    Homme Profil pro
    .NET / SQL SERVER
    Inscrit en
    Avril 2007
    Messages
    14 204
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Puy de Dôme (Auvergne)

    Informations professionnelles :
    Activité : .NET / SQL SERVER

    Informations forums :
    Inscription : Avril 2007
    Messages : 14 204
    Par défaut
    plusieurs erreurs dans ton code

    dejà ta procédure stockée a 3 paramètre et seulement sont utilisés dans le corps de la procédure
    donc tu n'as pas du comprendre à quoi sert une procédure stockée et/ou comment ca fonctionne
    de plus pour une requete c'est pas forcément utile de faire une procédure stockée


    tu dis plus loin que tu ajoutes des paramètre inputoutput ce qui veut dire des paramètres rentrants et sortants, et tu ne leur donnes pas de valeur d'entrée d'où le message d'erreur
    output tout court ne devrait pas planter

    m'enfin de toute facon c'est incohérent avec la procédure stockée que tu as écrit



    au passage, pourquoi écrire
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    string strProcedureStockee = "SP_FORMAT";
                SqlCommand MonFormat = new SqlCommand(strProcedureStockee, MaConnexion);
    au lieu de

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
                SqlCommand MonFormat = new SqlCommand("SP_FORMAT", MaConnexion);
    un programme court est un programme plus rapidement compréhensible donc plus maintenable
    Cours complets, tutos et autres FAQ ici : C# - VB.NET

  3. #3
    Membre éclairé
    Profil pro
    Inscrit en
    Février 2009
    Messages
    625
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2009
    Messages : 625
    Par défaut
    merci de ta réponse aussi rapide.

    ah ok donc pour toi sa ne sert a rien que je fasse une procédure stockée dans ce cas la ?

    je débute dans le c# et je me sers des cours pour développer donc j'avoue pouvoir pas encore bien optimiser.


    --


    même s'il est pas indispensable le faite de créer une procédure la rêquete sera plus rapide.

  4. #4
    Rédacteur
    Avatar de The_badger_man
    Profil pro
    Développeur .NET
    Inscrit en
    Janvier 2005
    Messages
    2 745
    Détails du profil
    Informations personnelles :
    Âge : 42
    Localisation : France, Yvelines (Île de France)

    Informations professionnelles :
    Activité : Développeur .NET

    Informations forums :
    Inscription : Janvier 2005
    Messages : 2 745
    Par défaut
    Les paramètres output de la proc ne servent à rien, vire les.

    Une fois que c'est fait, exec SP_FORMAT 3 devrait fonctionner. Teste-le et vérifie qu'il renvoie les bonnes données.

    Dans le code C# tu vires les deux derniers paramètres.

    Au lieu de ExecuteNonQuery (qui sert à exécuter une commande ne retournant pas de lignes) utilise ExecuteReader qui retourne un objet DataReader.

    Pour lire le DataReader il faut une boucle while.
    Utilise ce cours: http://dotnet.developpez.com/articles/ado1/csharp/
    Les règles du forum
    Le trio magique : FAQ + Cours + fonction rechercher
    Mes articles
    Pas de questions par messages privés svp

    Software is never finished, only abandoned.

  5. #5
    Membre éclairé
    Profil pro
    Inscrit en
    Février 2009
    Messages
    625
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2009
    Messages : 625
    Par défaut
    Franchement merci !

    par contre j'ai deux, trois questions:

    le paramètre que j'utilise pour la procédure stockée est choisi a partir d'une liste déroulante.

    est-ce que c'est du genre comme sa ?

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    oParam.Value = comboBox_pro_impression.ValueMember;
    Puis le résultat je veux le mettre dans une liste déroulante:

    comment je peux faire ? avant je faisais comme ceci:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    comboBox_pro_format.Items.Add(oReader.GetString(0));
    mais comment je fais pour que dans la liste il soit en 1er ? et pas un blanc

    derniere question toute bete comment on utilise la methode remove ?

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    comboBox_pro_format.Items.Remove(0); // marche pas
    car je veux faire une liste liée et a chaque évènement je veux mettre la liste à zéro


    EDIT:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
     
                 SqlCommand MonFormat = new SqlCommand("SP_FORMAT", MaConnexion);
                 MonFormat.CommandType = CommandType.StoredProcedure;
     
                 SqlParameter oParam = MonFormat.Parameters.Add("@produit", SqlDbType.Int);
                 // test 
                 oParam.Value = 24;
     
                     SqlDataReader oReader = MonFormat.ExecuteReader();
                     while (oReader.Read())
                     {
                         comboBox_pro_format.Items.Add(oReader.GetString(0));
                     }
                     oReader.Close();
    comment sa se fait que j'ai la liste qui se répete 3 fois ? dans ma liste déroulante

Discussions similaires

  1. passage d'un nom de table dans une procédure stockée
    Par thierry V dans le forum MS SQL Server
    Réponses: 7
    Dernier message: 26/07/2010, 16h48
  2. Procédure stocké:Insert et renvoie de la clé primair
    Par caramel dans le forum MS SQL Server
    Réponses: 4
    Dernier message: 17/04/2003, 09h34
  3. [Pervasive SQL ] procédure stockée
    Par magellan dans le forum Autres SGBD
    Réponses: 2
    Dernier message: 25/10/2002, 13h17
  4. Explication procédure stockée
    Par underworld dans le forum MS SQL Server
    Réponses: 2
    Dernier message: 09/09/2002, 10h51
  5. [Comparatif] Procédures stockées, triggers, etc.
    Par MCZz dans le forum Décisions SGBD
    Réponses: 3
    Dernier message: 28/08/2002, 12h27

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