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 :

SQLDataSource et la clause where : comment la rendre optionnelle ?


Sujet :

ASP.NET

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre très actif
    Profil pro
    Inscrit en
    Février 2009
    Messages
    163
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2009
    Messages : 163
    Par défaut SQLDataSource et la clause where : comment la rendre optionnelle ?
    Bonjour à tous,

    En ASP.NET 4.0, j’utilise un SQLDataSource.
    Dans la requête select, j’ai une clause Where avec un paramêtre.

    Code ASP : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
    <asp:SqlDataSource ID="sourceProduit" runat="server" ConnectionString="<%$ ConnectionStrings:BlaBlaConnectionString %>"
    SelectCommand=" SELECT Produit.numProduit, Produit.nomProduit 
    FROM Produit INNER JOIN RelClientProduit ON RelClientProduit.numProduit = Produit.numProduit
    WHERE RelClientProduit.numClient = @numClient">
         …
    </asp:SqlDataSource>

    Seulement, il arrive que parfois que dans certains cas d’affichage de ma page, je veuille avoir tous mes produits sans la condition sur numClient, autrement dit sans la clause where.

    • Solution bête COPIER COLLER :

    La solution la plus bête est de créer deux SQLDataSource, un avec et un sans la clause where, et changer celui qui « binde » ma grille. Sauf que quand on a de multiples paramètres : LOL.
    • Solution avec LIKE :

    Il y a une autre solution avec un LIKE ‘@numClient’. On donne ‘%’ comme valeur lorsque l’on veut tout selectionner.

    Code SQL : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    SELECT Produit.numProduit, Produit.nomProduit
    FROM Produit INNER JOIN RelClientProduit ON RelClientProduit.numProduit = Produit.numProduit
    WHERE RelClientProduit.numClient LIKE @numClient

    Je ne suis pas arrivé à la faire marcher lors du test dans l’interface de création de datasource… ça plante avec ‘%’ … alors que ça marche lorsque qu’on tape la requête directement dans SQL Management Studio... grrrrrrrrrr

    • Solution avec un autre paramêtre :


    Code SQL : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    SELECT Produit.numProduit, Produit.nomProduit
    FROM Produit INNER JOIN RelClientProduit ON RelClientProduit.numProduit = Produit.numProduit 
    WHERE 
    ((RelClientProduit.numClient = @numClient) AND (@etat = ‘UNSEULCLIENT’))
    OR (@etat = ‘TOUSLESCLIENTS’)

    Ici mon paramètre @etat est donc celui qui dit si oui ou non je veux tous les produit d’un client (@etat = ‘UNSEULCLIENT’) ou tout les produits tout cour (@etat = ‘TOUSLESCLIENTS’).
    La requête marche bien dans SQL Server Management Studio et dans le concepteur de requête (première étapes de configurer la source de données)




    mais elle ne marche pas @etat = ‘TOUSLESCLIENTS’ à la dernière étape de configurer la source de données… c'est fou ! Elle marchait 3 clics avant...




    Ca fait 3 jours que je bloque sur ce truc… je m’en remets donc à vous…

    Merci d’avance pour votre aide.
    Images attachées Images attachées    

  2. #2
    Membre éprouvé
    Profil pro
    Inscrit en
    Août 2009
    Messages
    147
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2009
    Messages : 147
    Par défaut
    As tu essayer '%' +param , ou param est un paramètre, de la session par exemple, contenant la chaîne vide? Ou bien faut-il échapper le %?

  3. #3
    Membre très actif
    Profil pro
    Inscrit en
    Février 2009
    Messages
    163
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2009
    Messages : 163
    Par défaut
    Ok je vais re-essayé ça, car du coup, je doutais de la possibilité d'utiliser LIKE ou '%' avec un type "int".

  4. #4
    Membre éprouvé
    Profil pro
    Inscrit en
    Août 2009
    Messages
    147
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2009
    Messages : 147
    Par défaut
    En fait dans la configuration d'une sqlDatasource en mode design si on choisit LIKE il rajoute automatiquement %, avant et après, le paramètre qu'on lui donne(tu peux le voir dans le html).Donc en théorie la chaîne vide devrait convenir.

  5. #5
    Membre très actif
    Profil pro
    Inscrit en
    Février 2009
    Messages
    163
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2009
    Messages : 163
    Par défaut
    Bon j'ai essayé ça :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    WHERE     (RelClientProduit.numClient LIKE '%' + CAST(@numClient AS VarChar(5)))
    Cela me retourne tout les produits donc le numClient... se finit par le paramètre saisi.

  6. #6
    Membre très actif
    Profil pro
    Inscrit en
    Février 2009
    Messages
    163
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2009
    Messages : 163
    Par défaut
    C'est bon !

    Voici la solution : caster l'id en string et utilisé un nombre ou %

    WHERE (CAST(RelClientProduit.numClient AS VarChar(5)) LIKE @numClient)

    Seul défaut : c'est très coûteux ! Donc à éviter si vous avez de grosse bases !


    Merci de ton aide davjan ^^

  7. #7
    Membre très actif
    Profil pro
    Inscrit en
    Février 2009
    Messages
    163
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2009
    Messages : 163
    Par défaut
    Bon en fait non, ça ne marche pas....



    EDIT :

    Si ça marche,

    Ma clause where est sur une relation nn, il manquit juste un petit Distinct au bon endroit :

    SELECT DISTINCT .......

Discussions similaires

  1. Comment ignorer la sélection de la clause WHERE.
    Par ABandApart dans le forum Requêtes
    Réponses: 6
    Dernier message: 11/06/2012, 11h05
  2. Réponses: 8
    Dernier message: 19/05/2011, 13h33
  3. [SQL] Comment ne pas exécuter une clause WHERE si une var est nulle
    Par charlysquare dans le forum PHP & Base de données
    Réponses: 4
    Dernier message: 01/05/2006, 21h12
  4. Réponses: 1
    Dernier message: 03/02/2006, 12h35
  5. Réponses: 3
    Dernier message: 11/12/2005, 11h15

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