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# / SQL AND OR


Sujet :

C#

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Homme Profil pro
    BAC +3
    Inscrit en
    Octobre 2018
    Messages
    164
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : BAC +3

    Informations forums :
    Inscription : Octobre 2018
    Messages : 164
    Par défaut C# / SQL AND OR
    Bonjour je viens pour un nouveau petit mystère,
    voici la traduction française du code suivant , j'explique ma question juste après.
    Lorsque que je cherche dans ma base de données une fiche FS ( qui contient 6 critères) je peux la chercher via mon appli. à l'aide d'un menu composé d'une textbox et de 6 combobox que vous retrouverez nommées dans le code ci-après. Chaque Combobox correspond à un critère de recherche ( Radiologique , Etat , Centre , Producteur , Destination , Conditionnement ). Lorsque j'ai sélectionné mes critères , le résultat s'affiche dans une list view . J'ai réussi à faire la recherche à partie d'un seul critères , mais je n'arrive pas à faire la recherche des plusieurs critères combinés.
    L'idée que j'ai souhaité mettre en place est la suivante :
    Si telle ou telle combox.Index est différentes de -1 alors tu rentre dans la boucle (Celle ci-dessous).
    Si telle combobox est utilisé alors tu rajoute un bout de code dans la requete
    Sinon tu laisse la requete comme elle est
    (Idem pour les autres combo)

    Une fois cela fait je fais ma requete SELECT toute les tables et je peche les infos donc j'ai besoin .
    Cependant j'ai toujours des erreurs

    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
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    else if (CatégorieRadiologique_ComboBox_Home.SelectedIndex != -1 | CodeEtatFS_ComboBox_Home.SelectedIndex != -1 | Producteur_ComboBox_Home.SelectedIndex != -1 | Centre_ComboBox_Home.SelectedIndex != -1 | StationDestination_ComboBox_Home.SelectedIndex != -1 | Conditionnement_ComboBox_Home.SelectedIndex != -1)
                {
                    string REQUERY = "";
                    string REQUERYSQL = "";
     
                    string FSVAR = "AND FS=@FS ";
                    string RADVAR = "AND Radiologique=@Radiologique  ";
                    string ETATVAR = "AND Lib_Code_Etat=@Lib_Code_Etat  ";
                    string PRODVAR = "AND Producteur=@Producteur ";
                    string CENTREVAR = "AND Centre=@Centre ";
                    string DESTIVAR = "AND Station_Destination=@Station_Destination ";
                    string CONDIVAR = "AND Conditionnement=@Conditionnement ";
     
                    if (FS_TextBox_Home.Text != "")
                    {
                        REQUERY += FSVAR;
                    }
                    else if (CatégorieRadiologique_ComboBox_Home.SelectedIndex != 1)
                    {
                        REQUERY = REQUERY + RADVAR;
                    }
                    else if (CodeEtatFS_ComboBox_Home.SelectedIndex != 1)
                    {
                        REQUERY = REQUERY + ETATVAR;
                    }
                    else if (Producteur_ComboBox_Home.SelectedIndex != 1)
                    {
                        REQUERY = REQUERY + PRODVAR;
                    }
                    else if (Centre_ComboBox_Home.SelectedIndex != 1)
                    {
                        REQUERY = REQUERY + CENTREVAR;
                    }
                    else if (StationDestination_ComboBox_Home.SelectedIndex != 1)
                    {
                        REQUERY = REQUERY + DESTIVAR;
                    }
                    else if (Conditionnement_ComboBox_Home.SelectedIndex != 1)
                    {
                        REQUERY = REQUERY + CONDIVAR;
                    }
                    else
                    {
                        REQUERY = REQUERYSQL;
                    }
     
     
                    MySqlCommand cmd = new MySqlCommand("SELECT FS , Radiologique , Lib_Code_Etat , Producteur , Centre , Station_Destination , Conditionnement " +
                        "FROM fiche " +
                        "JOIN ctg_rad ON fiche.ID_Rad = ctg_rad.ID_Rad " +
                        "JOIN etat ON fiche.Code_Etat = etat.Code_Etat  " +
                        "JOIN prod ON fiche.Code_Producteur = prod.Code_Producteur  " +
                        "JOIN site_centre ON fiche.Code_Centre = site_centre.Code_Centre " +
                        "JOIN station_destination ON fiche.Code_StationdeDestination = station_destination.Code_StationdeDestination " +
                        "JOIN statut_condition ON fiche.Code_Conditionnement = statut_condition.Code_Conditionnement WHERE " + REQUERYSQL, connection);                                              // Requète SQL SELECT
     
                    cmd.Parameters.AddWithValue("@FS", FS_TextBox_Home.Text);          //Récupération du FS souhaité par l'utilisateur
                    cmd.Parameters.AddWithValue("@Radiologique", CatégorieRadiologique_ComboBox_Home.Text);          //Récupération du ID_Rad souhaité par l'utilisateur
                    cmd.Parameters.AddWithValue("@Lib_Code_Etat", CodeEtatFS_ComboBox_Home.Text);                                //Récupération du Code_Etat souhaité par l'utilisateur
                    cmd.Parameters.AddWithValue("@Producteur", Producteur_ComboBox_Home.Text);                          //Récupération du Code_Producteur souhaité par l'utilisateur
                    cmd.Parameters.AddWithValue("@Centre", Centre_ComboBox_Home.Text);                                  //Récupération du Code_Centre souhaité par l'utilisateur
                    cmd.Parameters.AddWithValue("@Station_Destination", StationDestination_ComboBox_Home.Text);        //Récupération du Code_StationdeDestination souhaité par l'utilisateur
                    cmd.Parameters.AddWithValue("@Conditionnement", Conditionnement_ComboBox_Home.Text);                      //Récupération du Code_Conditionnement souhaité par l'utilisateur
     
                    if (Connecté)
                    {
                        using (
                            MySqlDataReader Lire = cmd.ExecuteReader())
                        {
                            while (Lire.Read())  // Boucle While qui regarde toutes les infos que l'on souhaite voir avec la méthode "lire"
                            {
                                string FS = Lire["FS"].ToString();                                                              // Declaration des colonnes et leurs équivalents (remplacants)
                                string Radiologique = Lire["Radiologique"].ToString();
                                string Lib_Code_Etat = Lire["Lib_Code_Etat"].ToString();
                                string Producteur = Lire["Producteur"].ToString();
                                string Centre = Lire["Centre"].ToString();
                                string Station_Destination = Lire["Station_Destination"].ToString();
                                string Conditionnement = Lire["Conditionnement"].ToString();
     
                                LW_FS_Home.Items.Add(new ListViewItem(new[] { FS, Radiologique, Lib_Code_Etat, Producteur, Centre, Station_Destination, Conditionnement }));// Ajout des nouvelles valeurs dans la list view
     
                            }
                        }
                        connection.Close();
                    }
                    else
                    {
                        MessageBox.Show("Erreur de connexion");
                        connection.Close();
                    }
     
     
                }
    MERCI BCP pour l'aide

  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
    Dire j'ai des erreurs sans préciser lesquelles ? Quel interet ?
    Sinon regarde ce que donne ta concaténation avec un point d'arrêt tu devrais voir le problème
    Cours complets, tutos et autres FAQ ici : C# - VB.NET

  3. #3
    Membre confirmé
    Homme Profil pro
    BAC +3
    Inscrit en
    Octobre 2018
    Messages
    164
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : BAC +3

    Informations forums :
    Inscription : Octobre 2018
    Messages : 164
    Par défaut
    Ouups pardon , il me dis qu'il y a une erreur dans la requêtes on dirait qu'elle ne s'écrit pas correctement alors que je trouve ça logique

  4. #4
    Expert confirmé
    Homme Profil pro
    Responsable Données
    Inscrit en
    Janvier 2009
    Messages
    5 448
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 51
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Responsable Données

    Informations forums :
    Inscription : Janvier 2009
    Messages : 5 448
    Par défaut
    Bonjour,
    A première vue, la requête va ressembler à ceci:
    Code sql : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    selectfromWHERE AND
    Il manque quelque chose entre le WHERE et le AND.

    Tatayo.

  5. #5
    Membre confirmé
    Homme Profil pro
    BAC +3
    Inscrit en
    Octobre 2018
    Messages
    164
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : BAC +3

    Informations forums :
    Inscription : Octobre 2018
    Messages : 164
    Par défaut
    ha oui d'accord ok merci, j'ai corriger mais j'ai toujours le meme message d'erreur : MySql.Data.MySqlClient.MySqlException*: 'Erreur de syntaxe près de '' à la ligne 1'

  6. #6
    Membre Expert
    Profil pro
    Dév
    Inscrit en
    Juin 2007
    Messages
    1 165
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : Dév

    Informations forums :
    Inscription : Juin 2007
    Messages : 1 165
    Par défaut
    C'est pas pour être méchant mais il est dégueulasse ton code, on aurait dit mon N+1

    Quelques remarques:

    • On ne MELANGE PAS la partie IHM avec les appels en base de données !!!!
    • les noms des variables en minuscule !!!
    • Tu peux factoriser tes tests de combobox dans une méthode qui prend en paramètre ta combobox. Bref bcp d'optimisation à faire !



    Sinon pour ton problème fait un Controle.WriteLine() du SQL généré et on pourra te déboguer. Ta chaîne de caractère est sûrement mal formatée

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

Discussions similaires

  1. sql AND & OR difference
    Par mmbmm dans le forum Langage SQL
    Réponses: 4
    Dernier message: 09/07/2008, 19h41
  2. Multiplier les And dans Sql Insert Into
    Par samlepiratepaddy dans le forum Requêtes et SQL.
    Réponses: 17
    Dernier message: 23/09/2005, 21h55
  3. Réponses: 8
    Dernier message: 24/08/2004, 22h25
  4. SQL :select et AND
    Par Shabata dans le forum Langage SQL
    Réponses: 5
    Dernier message: 20/05/2003, 13h39

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