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

VB.NET Discussion :

Caractères génériques et requête SQL [Débutant]


Sujet :

VB.NET

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre éclairé
    Inscrit en
    Mai 2004
    Messages
    304
    Détails du profil
    Informations personnelles :
    Âge : 71

    Informations professionnelles :
    Secteur : Santé

    Informations forums :
    Inscription : Mai 2004
    Messages : 304
    Par défaut Caractères génériques et requête SQL
    Bonjour
    Dans une BDD Access je voudrais chercher tous les titres de film contenant un certain mot
    J'ai créé cette requête mais le résultat reste vide
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Mycommand.CommandText = "SELECT * FROM Vidéo WHERE TitreFilm like  '*' & 'fois' & '*'"
    Quelle doit être la syntaxe exacte ?
    Merci de votre aide

  2. #2
    Modérateur
    Avatar de DotNetMatt
    Homme Profil pro
    CTO
    Inscrit en
    Février 2010
    Messages
    3 611
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 37
    Localisation : Etats-Unis

    Informations professionnelles :
    Activité : CTO
    Secteur : Finance

    Informations forums :
    Inscription : Février 2010
    Messages : 3 611
    Billets dans le blog
    3
    Par défaut
    Il est recommandé d'utiliser les requêtes paramétrées au lieu de la concaténation comme tu le fais. Cela offre des bénéfices que je te laisse découvrir...

    Autre mauvaise pratique, mettre des accents dans le nom des objets de la base de données.

    Ta commande devrait donc ressembler à ceci :
    Code VB.NET : Sélectionner tout - Visualiser dans une fenêtre à part
    Mycommand.CommandText = "SELECT * FROM Vidéo WHERE TitreFilm like  '*' & @fois & '*'"
    Less Is More
    Pensez à utiliser les boutons , et les balises code
    Desole pour l'absence d'accents, clavier US oblige
    Celui qui pense qu'un professionnel coute cher n'a aucune idee de ce que peut lui couter un incompetent.

  3. #3
    Membre éclairé
    Inscrit en
    Mai 2004
    Messages
    304
    Détails du profil
    Informations personnelles :
    Âge : 71

    Informations professionnelles :
    Secteur : Santé

    Informations forums :
    Inscription : Mai 2004
    Messages : 304
    Par défaut
    Bonjour
    Merci de tes conseils
    Je sais que mes pratiques sont parfois pas très conformes, mais je débute!
    Avec le temps et vos conseils je devrais m'améliorer.....

  4. #4
    Modérateur
    Avatar de Sankasssss
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Novembre 2006
    Messages
    1 842
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : Belgique

    Informations professionnelles :
    Activité : Développeur .NET
    Secteur : Administration - Collectivité locale

    Informations forums :
    Inscription : Novembre 2006
    Messages : 1 842
    Par défaut
    @DotNetMatt :
    Corrige moi si je me trompe mais tu as laissé la concaténation dans ta requête. On ne devrait pas plutôt avoir :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Mycommand.CommandText = "SELECT * FROM Vidéo WHERE TitreFilm like @fois"
    et rajouter les * dans la valeur du paramètre?

  5. #5
    Modérateur
    Avatar de DotNetMatt
    Homme Profil pro
    CTO
    Inscrit en
    Février 2010
    Messages
    3 611
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 37
    Localisation : Etats-Unis

    Informations professionnelles :
    Activité : CTO
    Secteur : Finance

    Informations forums :
    Inscription : Février 2010
    Messages : 3 611
    Billets dans le blog
    3
    Par défaut
    Sankasssss, à mon avis ça dépend. Si on a toujours les *, autant les mettre directement dans la requête, donc dans ce cas, on doit concaténer la valeur du paramètre à l'intérieur de la requête.

    Sinon, si ça peut varier effectivement on doit pouvoir les mettre dans le paramètre. Ceci dit, je n'ai jamais testé. Est-ce que ça ne serait pas filtré par le parsing qui sert à éliminer le risque d'injection SQL ?
    Less Is More
    Pensez à utiliser les boutons , et les balises code
    Desole pour l'absence d'accents, clavier US oblige
    Celui qui pense qu'un professionnel coute cher n'a aucune idee de ce que peut lui couter un incompetent.

  6. #6
    Modérateur
    Avatar de Sankasssss
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Novembre 2006
    Messages
    1 842
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : Belgique

    Informations professionnelles :
    Activité : Développeur .NET
    Secteur : Administration - Collectivité locale

    Informations forums :
    Inscription : Novembre 2006
    Messages : 1 842
    Par défaut
    Je ne pense pas que cela soit enlevé car j'en ai déjà fait et il me semble que cela fonctionnait.

    J'aurais pensé que si on faisait :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Mycommand.CommandText = "SELECT * FROM Vidéo WHERE TitreFilm like  '*'@fois'*'"
    Vu que le paramètre est de type VCHAR, il rajoute automatiquement les apostrophes et cela donnerait en exécution :
    Code sql : Sélectionner tout - Visualiser dans une fenêtre à part
    SELECT * FROM Vidéo WHERE TitreFilm like  '*''MA_VALEUR_PARAMETRE''*'

    Je n'ai malheureusement pas le temps de tester ça maintenant.

  7. #7
    Modérateur

    Homme Profil pro
    Inscrit en
    Janvier 2007
    Messages
    1 722
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Janvier 2007
    Messages : 1 722
    Par défaut
    Bonjour,
    Citation Envoyé par Jean-Luc80 Voir le message
    Dans une BDD Access je voudrais chercher tous les titres de film contenant un certain mot
    Avec access, il est préconisé d'utiliser le ? pour indiquer la variable à remplacer.
    Note : la requête fonctionnera avec @fois car en réalité avec access il ne tient pas compte de ce qui est écrit mais de la position ou il est sensé trouver un élément à remplacer par les paramètres.
    Surprenant, mais c'est ainsi qu'il fonctionne.
    En fait, à la place de ? vous pouvez écrire ce que vous voulez (@fois, @, fois, a, toto) cela fonctionnera aussi, mais après au niveau maintenance si l'on trouve n'importe quoi .
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Mycommand.CommandText = "SELECT * FROM Vidéo WHERE TitreFilm like ?"
    Pour le caractère générique avec acces on utilise le %.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Mycommand.Parameters.AddWithValue("?", "%" & Me.txtChercher.Text & "%")
    L'ordre d'ajout des paramètres est important, il doit respecter l'ordre d'apparition dans la requêtte.
    Traductions d'articles :
    La mémoire en .NET - Qu'est-ce qui va où ?
    Architecture DAL de haute performance et DTO ; Version C# : Partie 1,Partie 2,Partie 3 — Version VB.NET : Partie 1,Partie 2,Partie 3
    N'hésitez pas à consulter la FAQ VB.NET, le cours complet de Philippe Lasserre et tous les cours, articles et tutoriels.

  8. #8
    Membre Expert Avatar de _Ez3kiel
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Janvier 2013
    Messages
    836
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 33
    Localisation : France, Finistère (Bretagne)

    Informations professionnelles :
    Activité : Développeur .NET
    Secteur : Administration - Collectivité locale

    Informations forums :
    Inscription : Janvier 2013
    Messages : 836
    Par défaut
    Citation Envoyé par rv26t Voir le message
    Pour le caractère générique avec acces on utilise le %.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Mycommand.Parameters.AddWithValue("?", "%" & Me.txtChercher.Text & "%")

    Le caractère * passe aussi. Voir Utilisation de caractères génériques dans les comparaisons de chaînes et Opérateur Like et ce tuto Développez .

  9. #9
    Modérateur

    Homme Profil pro
    Inscrit en
    Janvier 2007
    Messages
    1 722
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Janvier 2007
    Messages : 1 722
    Par défaut
    Pourtant chez moi (access 2007, VS 2010)
    Images attachées Images attachées    
    Traductions d'articles :
    La mémoire en .NET - Qu'est-ce qui va où ?
    Architecture DAL de haute performance et DTO ; Version C# : Partie 1,Partie 2,Partie 3 — Version VB.NET : Partie 1,Partie 2,Partie 3
    N'hésitez pas à consulter la FAQ VB.NET, le cours complet de Philippe Lasserre et tous les cours, articles et tutoriels.

  10. #10
    Membre Expert Avatar de _Ez3kiel
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Janvier 2013
    Messages
    836
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 33
    Localisation : France, Finistère (Bretagne)

    Informations professionnelles :
    Activité : Développeur .NET
    Secteur : Administration - Collectivité locale

    Informations forums :
    Inscription : Janvier 2013
    Messages : 836
    Par défaut
    Appuyé aussi : http://sqlpro.developpez.com/cours/s.../#noteBasPage1

    Peut-être une MAJ pour mise aux normes depuis ?

    Peut-être un petit indice ici : http://www.developpez.net/forums/d57...l-like-access/


    Peut-être tester directement dans Access puis via VS nous éclairera ? (J'ai pas Access ...)



    EDIT : Trouvé !
    Informations de référence sur les caractères génériques dans Access

    Ca dépend de la norme ANSI prise en charge par Access (ANSI-89 -> * | ANSI-92 -> % )

  11. #11
    Modérateur

    Homme Profil pro
    Inscrit en
    Janvier 2007
    Messages
    1 722
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Janvier 2007
    Messages : 1 722
    Traductions d'articles :
    La mémoire en .NET - Qu'est-ce qui va où ?
    Architecture DAL de haute performance et DTO ; Version C# : Partie 1,Partie 2,Partie 3 — Version VB.NET : Partie 1,Partie 2,Partie 3
    N'hésitez pas à consulter la FAQ VB.NET, le cours complet de Philippe Lasserre et tous les cours, articles et tutoriels.

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

Discussions similaires

  1. [AC-2010] mettre une condition sur une chaine de caractères dans une requête sql
    Par freeman3869 dans le forum VBA Access
    Réponses: 1
    Dernier message: 05/06/2015, 11h45
  2. Réponses: 8
    Dernier message: 27/08/2012, 16h05
  3. Caractères bizarres dans requête SQL
    Par onizuka-21 dans le forum Ruby on Rails
    Réponses: 1
    Dernier message: 31/03/2009, 18h34
  4. caractère générique dans requête
    Par big1 dans le forum Requêtes et SQL.
    Réponses: 3
    Dernier message: 18/06/2007, 10h23
  5. limitation de caractére dans une requête SQL sous Acces
    Par amka dans le forum Requêtes et SQL.
    Réponses: 5
    Dernier message: 18/08/2006, 15h15

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