Member 12801143 Ответов: 1

Сомнение в SQL-запросе с LIKE


Привет,

У меня есть сомнения по поводу sql-запроса, который мне нужен, если кто-то может помочь, заранее спасибо.

Я хочу запросить базу данных продуктов, созданную в MS Acess, через приложение на C #. Мне нужно обратиться к базе данных, ищущей продукт по ссылке, эта ссылка может содержать различные имена и пробелы, например: "ABC FFF HHH XXXXXXXX" и я хочу, например, ввести в текстовое поле часть строки для поиска, например: "HHH", и запрос вернет мне все ссылки, содержащие "HHH", независимо от того, находятся ли они в начале, середине или конце ссылки.

Запрос, который у меня есть, ничего не возвращает:

Select * from product where product_ref like '% + TextBox_ref.Text +%';


Что я должен изменить в запросе, чтобы получить все ссылки, содержащие символы, введенные в текстовое поле, независимо от пробелов, которые ссылка может иметь в базе данных?

Спасибо,

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

Select * from product where product_ref like '% + TextBox_ref.Text +%';

[no name]

Вы должны узнать, как работает конкатенация строк.
"Выберите * из продукта, где product_ref like' % " + TextBox_ref.Текст + "%'";

1 Ответов

Рейтинг:
0

Wendelius

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

Select * from product where product_ref like '%'" + TextBox_ref.Text + "'%'

Однако то, что вы действительно должны сделать, это использовать параметры, Класса Oledbparameter (Системы.Данных.Для oledb)[^] в данном случае. Тогда текст запроса будет выглядеть следующим образом
Select * from product where product_ref like '%' + @searchString + '%'

Теперь вы добавите параметр для OleDbCommand и установите его значение. Это защитит вас, например, от SQL-инъекций.

Не уверен, что вы хотели бы также найти строки, имеющие HHH даже если данные в базе данных будут H HH Если это так, то вы можете использовать функцию REPLACE для удаления пробелов. Например
Select * from product where REPLACE(product_ref, ' ', '') like '%' + @searchString + '%'