Member 13779854 Ответов: 2

Sql like query не извлекает данные


У меня есть опция поиска по datagridview в VB.NET где пользователь выбирает категорию и вводит что-то в текстовое поле. При нажатии на кнопку поиска выполняется приведенный ниже код. Проблема в том, что в представлении data gridview нет данных. Что в этом плохого?



Private Sub btnSearchCustomers_Click(sender As Object, e As EventArgs) Handles btnSearchCustomers.Click
      Dim searchTable As New DataTable
      Dim SearchItem As String = txtCustomerSearch.Text
      Select Case ComboBoxCustomersSearchBy.SelectedItem
          Case "Name"
              SqlQuery = "SELECT * FROM tblCustomers WHERE CustomerName LIKE '%" & SearchItem & "&'"
              CustomerTable = db.getData(SqlQuery)
              DataGridViewCustomers.DataSource = CustomerTable
      End Select
  End Sub


Что я уже пробовал:

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

#realJSOP

Вы пробовали свой запрос в диспетчере sql server?

2 Ответов

Рейтинг:
12

CHill60

Этот амперсанд должен быть знаком процента...

LIKE '%" & SearchItem & "&'"
было бы
LIKE '%" & SearchItem & "%'"
Однако вы не должны использовать конкатенацию строк для создания sql-запросов. Научитесь использовать параметры sql


Рейтинг:
1

Patrice T

Цитата:
Что в этом плохого?

Sql-запрос имеет 2 проблемы, первая обнаружена в решении 1, вторая-sql-инъекция.
SqlQuery = "SELECT * FROM tblCustomers WHERE CustomerName LIKE '%" & SearchItem & "&'"

Не решение вашего вопроса, а еще одна проблема, которая у вас есть.
Никогда не создавайте SQL-запрос путем объединения строк. Рано или поздно вы сделаете это с помощью пользовательских вводов, и это откроет дверь к уязвимости под названием "SQL-инъекция", она опасна для вашей базы данных и подвержена ошибкам.
Одна кавычка в имени - и ваша программа выйдет из строя. Если пользователь вводит имя, например "Брайан О'Коннер", может привести к сбою вашего приложения, это уязвимость SQL-инъекции, и сбой-это наименьшая из проблем, вредоносный пользовательский ввод, и он продвигается к командам SQL со всеми учетными данными.
SQL-инъекция - Википедия[^]
SQL-инъекция[^]
Атаки SQL-инъекций на примере[^]
PHP: SQL-инъекция - руководство пользователя[^]
Шпаргалка по предотвращению инъекций SQL - OWASP[^]