Запрос доступа с подстановочным знаком - PullRequest
0 голосов
/ 04 ноября 2011

Я пытаюсь выполнить поиск по подстроке из базы данных Access 2010 в winforms.

command.Parameters.AddWithValue("@searchTerm", searchTerm);
command.CommandText = "SELECT [OA_Name] FROM [Operating_Authority_Table] WHERE [OA_Name] = [@%searchTerm%]";

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

неправильно ли я использую подстановочный знак?

Ответы [ 3 ]

5 голосов
/ 04 ноября 2011

Попробуйте что-то вроде этого:

command.Parameters.AddWithValue("@searchTerm", searchTerm); 
command.CommandText = "SELECT [OA_Name] FROM [Operating_Authority_Table] WHERE [OA_Name] = '%' + @searchTerm + '%'";
2 голосов
/ 04 ноября 2011

Принятый ответ:

"...WHERE [OA_Name] = '%' + @searchTerm + '%'";

При этом символы % будут рассматриваться как текстовые литералы.

Я был немного удивлен, потому что слово «подстановочный знак» в заголовке вопроса предполагает, что целью является сопоставление с образцом.Если это действительно так, я бы рекомендовал заменить оператор равенства = на оператор ALIKE, например

"...WHERE [OA_Name] ALIKE '%' + @searchTerm + '%'";

Проблема с оператором LIKE заключается в том, что ядро ​​базы данных Access (ACE,Jet, что угодно) использует разные символы подстановки в зависимости от так называемого ANSI Query Mode .Предположительно, вы используете ANSI-92 Query Mode, подразумевая использование SqlOleDb (но знаете ли вы об этом наверняка?)

Преимущество ALIKE состоит в том, что он использует одинаковые подстановочные знаки 'Standard' независимо от ANSIРежим запроса: % для нескольких символов и _ для одного символа.

1 голос
/ 04 ноября 2011

попробуйте использовать SQL LIKE Operator

 command.CommandText = "SELECT [OA_Name] FROM [Operating_Authority_Table] WHERE [OA_Name] LIKE '%"+ searchTerm +"%'";
...