2017-02-22 3 views
0

У меня проблема, я работаю над школьным проектом с Visual Basic, и я не могу заполнить набор данных запросом LIKE.Набор данных пуст

Я использую доступ для того, чтобы управлять базой данных и запрос:

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

В Access этот запрос работает нормально, но когда я использую его на Visual Basic OleDbDataAdapter заполняет мой DataSet с 0 строк ,

Вот код:

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

кампо и отвага являются переменными, которые имеют одни и те же данные, что и в примере Access, и я попытался, записывая их в буквальном смысле тоже.

Подключение к базе данных работает нормально, так как другие запросы работают отлично.

ответ

0

ADO.NET использует стандартный символ% в качестве подстановочных символов в выражениях LIKE.

Но ваша первая проблема для решения заключается в удалении конкатенаций строк при построении sql-запросов. Вы не можете доверять своему пользователю по этому вопросу. Если вы уйдете таким образом, вы сможете писать что угодно, и вы рискуете передать вредоносные команды в ваш механизм базы данных. Вы должны всегда использовать параметры в этих контекстах

В вашем коде присутствует также имя поля как переменная часть запроса.
Это не может быть параметрироваться, поэтому единственным разумным решением является представление вашего пользователя со списком имен полей, чтобы выбрать из

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

Наконец! Спасибо, я решил это с символом%. И большое спасибо за эти советы, я обязательно их буду использовать! –

Смежные вопросы