VB.Net Requête SQL avec Underscore ("_")

Résolu
cs_MagDix Messages postés 531 Date d'inscription lundi 5 juin 2006 Statut Membre Dernière intervention 6 octobre 2012 - 9 janv. 2009 à 17:28
cs_demonstorm Messages postés 29 Date d'inscription samedi 2 juin 2007 Statut Membre Dernière intervention 7 mars 2011 - 14 janv. 2009 à 17:27
Bonjour à tous...


J'ai un petit problème avec un requête SQL et le caractère underscore "_"


Voici ma Requête SQL qui fonctionne très bien à l'expection du "_"




Private Sub txtRecherche_TextChanged(ByVal sender As Object, ByVal e As System.EventArgs) Handles txtRecherche.TextChanged
RequeteSQL = "select MaTable.* from MaTable where NomItem like '%" & Replace(txtRecherche.Text, "'", "''") & "%' "
.....


End Sub




J'utilise un textbox et à chaque fois que je mets du texte, cela fais la requête SQL afin de faire afficher les résultats du textbox
dans un DataGridView.


Mon Bug:


J'ai des item qui peuvent se nommer par exemple
10-002
10_002


Si j'inscrit dans mon textbox (pour faire une recherche dans ma BD) l'item 10_002  alors il apparait dans le DataGridView
l'item 10_002 et 10-002. Mais il devrait afficher seulement l'item 10_002


Ma question: Dans un requête SQL, le Underscore ("_") est-il percu comme un trait d'union ("-")


Comment faire pour régler ce problème ?


Merci d'avance

5 réponses

cs_Jack Messages postés 14006 Date d'inscription samedi 29 décembre 2001 Statut Modérateur Dernière intervention 28 août 2015 79
13 janv. 2009 à 16:54
Non
Comme tu l'auras vu dans n'importe quelle source qui parle de SQL, les varaibles VB contenant le texte à chercher doivent être sorties des "
Cet exemple n'était qu'un indice :
   "Select * from maTable Where leChamp Like '%" & début & "[_]%'"

Dans ton exemple passé en message privé (grrr) :
"Select maTable.* from maTable Where monChamp Like '%ChaineGauche[_]ChaineDroite%'"
Tel que tu l'écris, il s'agit de texte en dur, pas de variables. Est-ce le cas ?
Si ce sont des variables VB contenant le texte à chercher, il faut les faire sortir des "  :
   RequeteSQL = "Select maTable.* " & _
                "  From maTable " & _
                "  Where monChamp Like '%" & ChaineGauche & _
                        "[_]" & ChaineDroite & "%'"

D'autre part, si tu cherches quelque chose qui ressemble à AB-0123-456, pourquoi vouloir utiliser les _ ?
Cette syntaxe [_] n'est utile que lorsque ce que tu recherches comporte un _.
En général, en VB pour SQL, on n'utilise jamais de TextBox directement puisqu'il faut traiter les cas particuliers comme les ", les ', les _ ou les %
Donc, il vaut mieux recopier le contenu de la TextBox dans une variable et utiliser la fonction Replace à quatre reprises :
   "  -->  ""
   '  -->  ''
   _  -->  [_]
   %  -->  [%]

Charge quelques sources qui parlent de DB, tu en apprendras plus.

Pourquoi je ne réponds pas aux messages privés : Parce que les forums sont là pour répondre aux questions pour les gens qui cherchent des solutions. Si je te réponds en privé, tu seras le seul à en profiter alors que ces explications peuvent servir à d'autres.

Vala
Jack, MVP VB
NB : Je ne répondrai pas aux messages privés

<hr />Le savoir est la seule matière qui s'accroit quand on la partage (Socrate)
3
cs_Jack Messages postés 14006 Date d'inscription samedi 29 décembre 2001 Statut Modérateur Dernière intervention 28 août 2015 79
9 janv. 2009 à 19:29
Salut
Le symbole "_" est un symbole réservé sous SQL : Il remplace n'importe quel caractère unique (dans un Like).
Si tu dois chercher ce symbole parmi tes données, il faut l'encadrer par des crochets droits [ et ], exemple
   "Select * from maTable Where leChamp Like '%début[_]fin%'"
pour trouver les champs cmportant le texte "début_fin" dans ses données

Vala
Jack, MVP VB
NB : Je ne répondrai pas aux messages privés

<hr />Le savoir est la seule matière qui s'accroit quand on la partage (Socrate)
0
cs_MagDix Messages postés 531 Date d'inscription lundi 5 juin 2006 Statut Membre Dernière intervention 6 octobre 2012 1
12 janv. 2009 à 19:16
Salut...

et bien il ne tient pas compte du _ dans ta proposition de requête.
je sais que je n'ai pas d'erreur dans ma variable Debut et Fin. J'ai même essayé avec seulement la variable Debut  et ca ne fonctionne pas non plus... Pourrait-il manquer une information dans la requête ??
Merci d'avance
 "Select * from maTable Where leChamp Like '%début[_]%'"
0
cs_MagDix Messages postés 531 Date d'inscription lundi 5 juin 2006 Statut Membre Dernière intervention 6 octobre 2012 1
14 janv. 2009 à 15:03
Merci beaucoup pour la solution....
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
cs_demonstorm Messages postés 29 Date d'inscription samedi 2 juin 2007 Statut Membre Dernière intervention 7 mars 2011
14 janv. 2009 à 17:27
Salut,
j'ai un souci, j'essaye de faire un logiciel qui va faire du SELECT dans une db mysql, mais mon souci est que je n'arrive pas à trouver la syntaxe pour connecter mon logiciel à mysql...
j'utilise VBNet 2008 et actuelement la syntaxe que j'ai reussi à faire et qui fonctionne est faites pour se connecter à sqlserver 2005...

si je pouvez avoir un coup de main ca serai vachement sympa!
merci d'avance...
bonne année à vous...
0
Rejoignez-nous