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

ASP.NET Discussion :

Comment ne pas prendre en compte les valeurs vide dans une requete paramétrée? [Débutant]


Sujet :

ASP.NET

  1. #1
    Membre actif
    Profil pro
    Inscrit en
    Novembre 2005
    Messages
    551
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations forums :
    Inscription : Novembre 2005
    Messages : 551
    Points : 260
    Points
    260
    Par défaut Comment ne pas prendre en compte les valeurs vide dans une requete paramétrée?
    Bonjour,

    Comment faire si l'utilisateur n'a pas rentré de valeur pour par exemple cp, pour que la recherche ne se fasse pas selon ce critère?

    Existe t'il une autre solution que de tester la valeur de ma variable et de construire la requete SQL en incluant le filtre seulement si ma variable est différente de "" ?

    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
     
    cmd.CommandType = System.Data.CommandType.Text;
                cmd.CommandText = "SELECT  * FROM rechercheListeBien where cp=@cp and ";
                cmd.CommandText += " type=@type";
     
                DbParameter cp = cmd.CreateParameter();
                cp.ParameterName = "@cp";
                cp.DbType = System.Data.DbType.String;
                cp.Value = rechercheEnCours.Cp;
                cp.Direction = System.Data.ParameterDirection.Input;
                cmd.Parameters.Add(cp);
     
                DbParameter typeBien = cmd.CreateParameter();
                typeBien.ParameterName = "@type";
                typeBien.DbType = System.Data.DbType.String;
                typeBien.Value = rechercheEnCours.TypeBien;
                typeBien.Direction = System.Data.ParameterDirection.Input;
                cmd.Parameters.Add(typeBien);
    merci d'avance
    Nath

  2. #2
    Membre éclairé
    Inscrit en
    Septembre 2007
    Messages
    1 137
    Détails du profil
    Informations personnelles :
    Âge : 40

    Informations forums :
    Inscription : Septembre 2007
    Messages : 1 137
    Points : 707
    Points
    707
    Par défaut
    Pas tout compris á ce que tu veux faire mais voici une solution

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
    cmd.CommandText = "SELECT  * FROM rechercheListeBien where ";
    if(rechercheEnCours.Cp !0 null)
    {
                cmd.CommandText += " cp=@cp and ";
    }
                cmd.CommandText += " type=@type";
    par contre faut gerer les AND et le Where pour que ta requete soit toujours sous la bonne forme, est ceci que tu cherchais ?

  3. #3
    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
    Avec une petite modification de la requête :

    Code SQL : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    SELECT  *
    FROM rechercheListeBien
    where (cp=@cp OR @cp is null)
    and (type=@type OR @type is null)

  4. #4
    Membre actif
    Profil pro
    Inscrit en
    Novembre 2005
    Messages
    551
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations forums :
    Inscription : Novembre 2005
    Messages : 551
    Points : 260
    Points
    260
    Par défaut
    je cherchais justement un moyen d'éviter les test car je trouve un peu moche
    Mais merci quand même !

    Merci tomlev pour ta solution !

  5. #5
    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
    Citation Envoyé par nath-0-0 Voir le message
    je cherchais justement un moyen d'éviter les test car je trouve un peu moche
    Mais merci quand même !

    Merci tomlev pour ta solution !
    Avec Oracle, tu aurais cette solution :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    SELECT  *
    FROM rechercheListeBien
    WHERE NVL(@cp, cp) = cp  AND NVL(@type,type) = type
    Mais, les paramètres commençant par '@' semblent indiquer que tu utilises Sql Server; donc je pense que la solution suivante marche :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    SELECT  *
    FROM rechercheListeBien
    WHERE COALESCE(@cp, cp) = cp  
    AND COALESCE(@type,  type) = type

    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

  6. #6
    Expert confirmé
    Homme Profil pro
    Inscrit en
    Février 2003
    Messages
    2 177
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : Belgique

    Informations forums :
    Inscription : Février 2003
    Messages : 2 177
    Points : 4 489
    Points
    4 489
    Par défaut
    Citation Envoyé par Bluedeep Voir le message
    Avec Oracle, tu aurais cette solution :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    SELECT  *
    FROM rechercheListeBien
    WHERE NVL(@cp, cp) = cp  AND NVL(@type,type) = type
    Mais, les paramètres commençant par '@' semblent indiquer que tu utilises Sql Server; donc je pense que la solution suivante marche :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    SELECT  *
    FROM rechercheListeBien
    WHERE COALESCE(@cp, cp) = cp  
    AND COALESCE(@type,  type) = type
    Il faut utiliser la solution de tomlev, ta solution ne marche pas avec les nulls
    Tu auras le test NULL = NULL et pour un SGBD c'est faux
    Donc tu n'auras aucun des records avec CP à null
    Je ne suis qu'un pauvre débutant alors ne frappez pas si mes idées ne sont pas bonnes

  7. #7
    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
    Citation Envoyé par BenoitM Voir le message
    Il faut utiliser la solution de tomlev, ta solution ne marche pas avec les nulls
    Tu auras le test NULL = NULL et pour un SGBD c'est faux
    Si @Cp est null, le test COALESCE(@cp, cp) = cp devient cp = cp.

    Si cp est null, en effet, ça ne marche pas, mais c'est le cas aussi de
    CP = @CP

    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

  8. #8
    Expert confirmé
    Homme Profil pro
    Inscrit en
    Février 2003
    Messages
    2 177
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : Belgique

    Informations forums :
    Inscription : Février 2003
    Messages : 2 177
    Points : 4 489
    Points
    4 489
    Par défaut
    Mais la solution de tomlev prend tous ceux qui sont égales à @CP et si @CP est à null il les prend tous (grace à "OR @cp IS NULL")
    Je ne suis qu'un pauvre débutant alors ne frappez pas si mes idées ne sont pas bonnes

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

Discussions similaires

  1. Afficher les lignes vides dans une requete
    Par Mattorre dans le forum Langage SQL
    Réponses: 4
    Dernier message: 26/07/2010, 14h13
  2. [XL-2003] Masquer une cellule et ne pas prendre en compte sa valeur dans les calculs
    Par *.Har(d)t dans le forum Macros et VBA Excel
    Réponses: 5
    Dernier message: 30/10/2009, 11h07
  3. Réponses: 2
    Dernier message: 16/07/2009, 17h39
  4. [XHTML] Ne pas prendre en compte les balises XHTML
    Par simnitch dans le forum Balisage (X)HTML et validation W3C
    Réponses: 8
    Dernier message: 18/08/2005, 15h58
  5. Affcecter une valeur NULL dans une requete paramétrée
    Par thiouwz2 dans le forum Bases de données
    Réponses: 7
    Dernier message: 05/11/2004, 15h02

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