2017-02-22 1 views
0

J'ai un problème, je travaille sur un projet d'école avec Visual Basic et je n'arrive pas à remplir un jeu de données avec une requête LIKE.Le jeu de données est vide

J'utilise l'accès afin de gérer la base de données et la requête est:

SELECT * FROM VistaProductos WHERE Nombre LIKE "*ta*" 

Dans Access cette requête fonctionne très bien, mais quand je l'utilise sur Visual Basic le OleDbDataAdapter remplit mon DataSet avec 0 lignes .

Voici le code:

Dim adaptador As New OleDbDataAdapter("SELECT * FROM VistaProductos WHERE " & campo & " LIKE ""*" & valor & "*""", conexion) 
adaptador.Fill(dataset, tabla) 
Return dataset 

campo et le courage sont des variables qui ont les mêmes données que dans l'exemple d'accès, et j'ai essayé en les écrivant littéralement aussi.

La connexion à la base de données fonctionne correctement car les autres requêtes fonctionnent parfaitement.

Répondre

0

ADO.NET utilise le caractère% standard comme caractère générique dans les expressions LIKE.

Mais votre premier problème à résoudre consiste à supprimer les concaténations de chaînes lorsque vous créez des requêtes sql. Vous ne pouvez pas faire confiance à votre utilisateur sur ce point. Si vous partez de cette façon, votre utilisateur peut écrire n'importe quoi et vous risquez de transmettre des commandes malveillantes à votre moteur de base de données. Vous devez toujours utiliser les paramètres dans ces contextes

Dans votre code est également présent un nom de champ en tant que partie variable de la requête.
Ce ne peut pas être paramétrés, donc la seule solution raisonnable est de présenter votre utilisateur une liste des noms de champs à choisir

Dim cmdText = "SELECT * FROM VistaProductos WHERE " & campo & " LIKE @valor" 
Dim adaptador As New OleDbDataAdapter(cmdText, conexion) 
adaptador.SelectCommand.Parameters.Add("@valor", OleDbType.VarWChar).Value = "%" & valor & "%" 
adaptador.Fill(dataset, tabla) 
Return dataset 
+0

Enfin! Merci, je l'ai résolu avec le caractère%. Et merci beaucoup pour ces conseils, je vais certainement les utiliser! –