2012-03-30 3 views
3

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

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

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

Я смущен.

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

+4

Пробовал '%' вместо '*'? –

+2

1) Использовать параметры 2)% является оператором LIKE, а не * – Quintium

+1

Убедитесь, что вы дезинфицируете свой вход, или злонамеренный пользователь может в конечном итоге сбросить таблицу или выполнить всевозможные коварные коды с помощью атаки на SQL-инъекцию. – Maciej

ответ

9

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

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

2

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

3

Рассмотрим ли недокументированные оператор ALike сравнения Access' сделать это легче иметь дело с.

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

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

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

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