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 :

Problème avec une requête SQL en C#


Sujet :

C#

  1. #1
    Membre à l'essai
    Inscrit en
    Mai 2007
    Messages
    26
    Détails du profil
    Informations forums :
    Inscription : Mai 2007
    Messages : 26
    Points : 15
    Points
    15
    Par défaut Problème avec une requête SQL en C#
    Bonjour,

    Mon application est une gestion de pizza, je charge d'abord la table pizza dans un datagridview, puis la ligne selectioné est mise dans 1 listbox et enfin je voudrais que en cochant une checkbox le prix de la pizza apparaisse dans la listbox.
    Donc tout marche sauf la dernière partie.

    Voila j'ai un problème, tout marche SAUF la deuxième requete : "select prix from prix inner join pizza on prix.num_pizza=pizza.num_pizza where nom_pizza=+libelle_pizza";

    Je n'arrive pas à faire comprendre à cette "abruti" de requete que je veux le prix de la pizza dont le nom est contenu dans la variable libelle_pizza. Sachant que la variable libelle_pizza est la ligne sélectionnée dans le datagridview.

    Tout le reste du code marche et si je change cette requete par exemple : select prix from prix) ca marche donc vraiment je sais pas comment faire.

    D'avance merci.

    Voici le code :


    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
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    using System;
    using System.Collections.Generic;
    using System.ComponentModel;
    using System.Data;
    using System.Drawing;
    using System.Text;
    using System.Windows.Forms;
    using System.Data.OleDb;
     
    namespace WindowsApplication1
    {
    public partial class Form2 : Form
    {
    string NomClient;
    string Adresse;
    OleDbConnection cnx;
    OleDbCommand cmd;
    OleDbDataReader rdr;
    string chaine, sql,sql2;
    string libelle_pizza,prix;
     
     
     
    public Form2(string nom_client, string adresse)
    {
    InitializeComponent();
    NomClient=nom_client;
    Adresse=adresse;
    }
     
    private void Form2_Load(object sender, EventArgs e)
    {
    chaine = "provider=microsoft.jet.oledb.4.0;data source=" + "pizza.mdb";
    cnx = new OleDbConnection(chaine);
    sql = "select nom_pizza,ingredient,épicé,végétarien from pizza";
    cmd = new OleDbCommand(sql, cnx);
    cnx.Open();
    rdr = cmd.ExecuteReader();
    while (rdr.Read())
    {
    dataGridView1.Rows.Add(rdr[0].ToString(), rdr[1].ToString(), rdr[2].ToString(), rdr[3].ToString());
    }
    libelle_pizza = dataGridView1.CurrentCell.Value.ToString();
     
    }
     
    private void button1_Click(object sender, EventArgs e)
    {
    listBox1.Items.Add(libelle_pizza);
     
    MessageBox.Show("essai= "+libelle_pizza);
    }
     
    private void checkBox2_CheckedChanged(object sender, EventArgs e)
    {
     
    cnx.Close();
    sql2 = "select prix from prix inner join pizza on prix.num_pizza=pizza.num_pizza where nom_pizza=+libelle_pizza";
    cmd = new OleDbCommand(sql2, cnx);
    cnx.Open();
    rdr = cmd.ExecuteReader();
    while (rdr.Read())
    {
    prix = rdr[0].ToString();
    listBox1.Items.Add(prix);
    }
    }
     
     
     
     
    }
    }

  2. #2
    Membre extrêmement actif Avatar de fally
    Homme Profil pro
    Développeur .Net / BI
    Inscrit en
    Novembre 2007
    Messages
    966
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Bénin

    Informations professionnelles :
    Activité : Développeur .Net / BI

    Informations forums :
    Inscription : Novembre 2007
    Messages : 966
    Points : 1 173
    Points
    1 173
    Par défaut
    Bonjour!
    Ceci dit, je crois tu as un problème de requête SQL. Tu veux dire à ta base affiche moi le prix de telle pizza; essaie ceci :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    string marequete = "select prix from prix where nom_pizza = libelle_pizza";

  3. #3
    Membre à l'essai
    Inscrit en
    Mai 2007
    Messages
    26
    Détails du profil
    Informations forums :
    Inscription : Mai 2007
    Messages : 26
    Points : 15
    Points
    15
    Par défaut
    J'ai essayé cela ne marche pas. Peut etre à cause du fait que libelle_pizza est une variable et qu'il ne le reconnait pas en tant que tel.

    Merci de votre aide.

  4. #4
    Membre extrêmement actif Avatar de fally
    Homme Profil pro
    Développeur .Net / BI
    Inscrit en
    Novembre 2007
    Messages
    966
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Bénin

    Informations professionnelles :
    Activité : Développeur .Net / BI

    Informations forums :
    Inscription : Novembre 2007
    Messages : 966
    Points : 1 173
    Points
    1 173
    Par défaut
    Quelle erreur remarques-tu?

  5. #5
    Membre à l'essai
    Inscrit en
    Mai 2007
    Messages
    26
    Détails du profil
    Informations forums :
    Inscription : Mai 2007
    Messages : 26
    Points : 15
    Points
    15
    Par défaut
    L'exception oledbexception n'a pas été géré, il met cette érreur à cette ligne là :
    rdr = cmd.ExecuteReader();

    Je suis quasiment sur que ces un pb de requete mais si le pc me le dit pas car avec une requete basique (genre : select prix from prix ) cela marche.

    D'avance merci pour votre aide.

  6. #6
    Membre extrêmement actif Avatar de fally
    Homme Profil pro
    Développeur .Net / BI
    Inscrit en
    Novembre 2007
    Messages
    966
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Bénin

    Informations professionnelles :
    Activité : Développeur .Net / BI

    Informations forums :
    Inscription : Novembre 2007
    Messages : 966
    Points : 1 173
    Points
    1 173
    Par défaut
    Après un acces à la base de données, il faut prendre le soin de fermer ta OleDbDatarReader :

  7. #7
    Membre à l'essai
    Inscrit en
    Mai 2007
    Messages
    26
    Détails du profil
    Informations forums :
    Inscription : Mai 2007
    Messages : 26
    Points : 15
    Points
    15
    Par défaut
    Désolé cela n'a rien changé. J'ai toujours la même erreur.

    D'avance merci de votre aide

  8. #8
    Membre extrêmement actif Avatar de fally
    Homme Profil pro
    Développeur .Net / BI
    Inscrit en
    Novembre 2007
    Messages
    966
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Bénin

    Informations professionnelles :
    Activité : Développeur .Net / BI

    Informations forums :
    Inscription : Novembre 2007
    Messages : 966
    Points : 1 173
    Points
    1 173
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    rdr = cmd.ExecuteReader();
    while (rdr.Read())
    {
    dataGridView1.Rows.Add(rdr[0].ToString(), rdr[1].ToString(), rdr[2].ToString(), rdr[3].ToString());
    }
    rdr.Close();
    Même chose pour ta deuxième requête.

  9. #9
    Rédacteur/Modérateur


    Homme Profil pro
    Développeur .NET
    Inscrit en
    Février 2004
    Messages
    19 875
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Développeur .NET
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Février 2004
    Messages : 19 875
    Points : 39 749
    Points
    39 749
    Par défaut
    Citation Envoyé par fally Voir le message
    Après un acces à la base de données, il faut prendre le soin de fermer ta OleDbDatarReader :
    Effectivement il faut fermer le DataReader après utilisation, mais ça n'a rien à voir avec le problème : ça plante avant même qu'il soit créé !

    C'est bien la requête qui pose problème : libelle_pizza est une variable de ton code, la base de données ne sait pas ce que c'est. Donc tu as une erreur de syntaxe. 2 solutions possibles :

    - construire ta requête dynamiquement en fonction de la valeur du libellé :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    sql2 = "select prix from prix inner join pizza on prix.num_pizza=pizza.num_pizza where nom_pizza='" + libelle_pizza + "'";
    Mais c'est déconseillé (en plus si libelle_pizza contient un apostrophe, il faut le doubler, sinon ça "casse" la requête)

    - utiliser un paramètre :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
    sql2 = "select prix from prix inner join pizza on prix.num_pizza=pizza.num_pizza where nom_pizza=@libelle_pizza";
    OleDbParameter prm = new OleDbParameter("@libelle_pizza", OleDbType.VarChar);
    prm.Value = libelle_pizza;
    cmd = new OleDbCommand(sql2, cnx);
    cmd.Parameters.Add(prm);
    rdr = cmd.ExecuteReader();
    (note le "@" dans la requête)
    Cette méthode est plus sûre, et en plus tu n'as pas à te préoccuper du format des données passées en paramètres

    Au fait, tu devrais utiliser des variables locales dans tes méthodes, ce serait plus clair...

  10. #10
    Membre à l'essai
    Inscrit en
    Mai 2007
    Messages
    26
    Détails du profil
    Informations forums :
    Inscription : Mai 2007
    Messages : 26
    Points : 15
    Points
    15
    Par défaut
    Un grand merci tomlev pour ta réponse cela a resolu mon probleme, c'est génial!!

    Malheureusment j'en ai un autre du meme style

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    sql2 = "select prix from prix inner join pizza on prix.num_pizza=pizza.num_pizza where nom_pizza= @libelle_pizza and taille="+1
    ;

    En fait je voudrais avoir le prix d'une pizza en fonction de son nom (ça c'est bon) de sa taille (le problème).
    Je pense et j'espère que je ne suis pas obligé de passé par un nouveau oledbparameter sachant que la taille de la pizza n'est pas contenu dans un variable mais en dur. Mais la syntaxe que j'ai mise ne doit pas etre la bonne car cela ne marche pas.




    2ème question :
    Est ce qu'il y a moyen d 'effectuer un traitement que lorsque la checkbox est coché,mais de ne pas effectuer ce traitement lorsque la checkbox est décoché. Donc de ne pas utilisé
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    checkBox2_CheckedChanged
    , mais un truc qui lui ressemble.

    D'avance un très grand merci

  11. #11
    Expert confirmé
    Avatar de debug
    Profil pro
    Inscrit en
    Avril 2002
    Messages
    1 034
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2002
    Messages : 1 034
    Points : 4 093
    Points
    4 093
    Par défaut
    Si ta taille 1 n'est pas une variable mais une valeur fixe, essaie :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    "select prix from prix inner join pizza on prix.num_pizza=pizza.num_pizza where nom_pizza= @libelle_pizza and taille=1"
    Tout simplement
    May the Troll, be with you
    (Que le troll soit avec toi)

  12. #12
    Expert confirmé
    Avatar de debug
    Profil pro
    Inscrit en
    Avril 2002
    Messages
    1 034
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2002
    Messages : 1 034
    Points : 4 093
    Points
    4 093
    Par défaut
    Concernant ta 2 ième question, tu peux utiliser le checkBox2_CheckedChanged

    il faut juste dans ta méthodes tester :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    if(checkbox2.Checked)
    {
        // alors faire le traitement car ma box est cochée
    }
    May the Troll, be with you
    (Que le troll soit avec toi)

  13. #13
    Membre à l'essai
    Inscrit en
    Mai 2007
    Messages
    26
    Détails du profil
    Informations forums :
    Inscription : Mai 2007
    Messages : 26
    Points : 15
    Points
    15
    Par défaut
    Citation Envoyé par debug Voir le message
    Si ta taille 1 n'est pas une variable mais une valeur fixe, essaie :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    "select prix from prix inner join pizza on prix.num_pizza=pizza.num_pizza where nom_pizza= @libelle_pizza and taille=1"
    Tout simplement
    J'ai essayé comme ça, c'est meme la 1ère chose que j'ai essayé mais cela ne marche pas. Le champ taille est dans la table prix, c'est peut etre pour ca. Pourtant j'ai fait une jointure.Je comprend pas

    voici mes 2 tables :
    pizza (num_pizza,nom_pizza, ingredient, épicé, végétarien)
    Prix (n°prix, prix, taille, #num_pizza)


    Un grand merci pour votre aide, vous êtes vraiment sympa.

  14. #14
    Expert confirmé
    Avatar de debug
    Profil pro
    Inscrit en
    Avril 2002
    Messages
    1 034
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2002
    Messages : 1 034
    Points : 4 093
    Points
    4 093
    Par défaut
    Citation Envoyé par valebl Voir le message
    J'ai essayé comme ça, c'est meme la 1ère chose que j'ai essayé mais cela ne marche pas. Le champ taille est dans la table prix, c'est peut etre pour ca. Pourtant j'ai fait une jointure.Je comprend pas

    voici mes 2 tables :
    pizza (num_pizza,nom_pizza, ingredient, épicé, végétarien)
    Prix (n°prix, prix, taille, #num_pizza)


    Un grand merci pour votre aide, vous êtes vraiment sympa.
    Personnellement j'aurais évité le nom du champ identique au nom de la table, à savoir Prix.

    Après... ta requête me semble correcte niveau syntaxique...
    May the Troll, be with you
    (Que le troll soit avec toi)

  15. #15
    Rédacteur/Modérateur


    Homme Profil pro
    Développeur .NET
    Inscrit en
    Février 2004
    Messages
    19 875
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Développeur .NET
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Février 2004
    Messages : 19 875
    Points : 39 749
    Points
    39 749
    Par défaut
    tu es sûr que prix est bien défini comme un nombre dans le schema de la base ? Si c'est du texte, il faut mettre des quotes autour de la valeur

  16. #16
    Membre à l'essai
    Inscrit en
    Mai 2007
    Messages
    26
    Détails du profil
    Informations forums :
    Inscription : Mai 2007
    Messages : 26
    Points : 15
    Points
    15
    Par défaut
    Ca marche c'est génial!!!!!

    En fait j'avais pas fait les modification de table au bon endroit.

    Je vous remercie tous beaucoup pour vos réponses.

    Bonne continuation et longue vie à ce forum

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Petit problème avec une requête SQL en VB6
    Par muzele dans le forum VB 6 et antérieur
    Réponses: 7
    Dernier message: 15/11/2007, 20h51
  2. Problème avec une requête sql
    Par mika0102 dans le forum Langage SQL
    Réponses: 8
    Dernier message: 10/10/2007, 15h50
  3. [SQL] Problème avec une requête sql
    Par bodysplash007 dans le forum PHP & Base de données
    Réponses: 22
    Dernier message: 11/05/2007, 17h30
  4. [MySQL] Problème avec une requête SQL
    Par chobol dans le forum PHP & Base de données
    Réponses: 12
    Dernier message: 11/05/2006, 12h29
  5. [VB]Problème avec une requête SQL
    Par Tyrael62 dans le forum VB 6 et antérieur
    Réponses: 7
    Dernier message: 18/03/2006, 17h47

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