Запрос ничего не возвращает - PullRequest
3 голосов
/ 30 марта 2012

Я пытаюсь получить некоторые результаты из базы данных, но запрос не выполняется!

String sqlFindModel = "SELECT * FROM [PRODUCT] WHERE [PN] LIKE ('*" + textBox1.Text + "*')";

Когда я обрезаю часть "WHERE [PN] LIKE ...", она работает нормально. Когда я заменяю LIKE на '=' и ищу Точное значение, это работает.

Я в замешательстве.

PS - Интересно, что когда вы выполняете Query in ACCESS напрямую, вы должны использовать *; но при использовании C # и подключении к MS Access нужно использовать% ... интересно!

Ответы [ 3 ]

9 голосов
/ 30 марта 2012

* не используется для подстановочных знаков в SQL LIKE операторов - % is.

Однако, вы не должны просто изменить свой кодиспользовать % - вы должны исправить свой код, чтобы он не был уязвим для атак SQL-инъекций .Вместо этого вы должны использовать параметризованный SQL.См. Документацию для OleDbCommand.Parameters для примера.

3 голосов
/ 30 марта 2012

Подумайте, упростит ли оператор Access недокументированный ALike оператор сравнения.

"SELECT * FROM [PRODUCT] WHERE [PN] ALike '%" + textBox1.Text + "%'"

ALike сигнализирует Access 'db engine, чтобы он ожидал подстановочные знаки ANSI (% и _ вместо * и?). Таким образом, ваш запрос может работать одинаково независимо от того, выполняете ли вы его в сеансе Access или вне сеанса Access с использованием OleDb.

Я видел возражения против ALike из-за того, что это не стандартный SQL. Однако при адаптации запросов Access для других механизмов БД я предпочитаю изменить ALike на Like, а не менять * и? в% и _.

2 голосов
/ 30 марта 2012

Попробуйте заменить символ * на%

...