Как использовать буквенное подчеркивание в запросе подстановки SQL Access через OLEDB в C #? - PullRequest
2 голосов
/ 23 апреля 2019

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

Когда я запускаю следующий запрос внутри запроса MS Access 365окно, я получаю 97 записей, как и ожидалось:

SELECT *
FROM Prices
WHERE OptionID Like '*_*'

Моя цель состояла в том, чтобы вернуть все записи, в которых OptionID содержит подчеркивание.Успех.

Когда я запускаю следующий запрос в окне запроса MS Access 365, я получаю 109 967 записей, как и ожидалось:

SELECT *
FROM Prices

Только 97 из моих OptionID имеют подчеркивание, итаким образом, предложение where в первом запросе выше ограничивает набор записей 97 записями, как и ожидалось.

Вот где это становится сложным.

Когда я запускаю этот запрос в моемПриложение C #, подключающееся к Access через OleDb:

SELECT *
FROM Prices
WHERE OptionID Like '*_*'

... Я получаю 0 записей.Причина в том, что Access SQL через OleDb должен использовать % вместо * при подстановочных знаках.И тогда я делаю это:

SELECT *
FROM Prices
WHERE OptionID Like '%_%'

... и получаю 109 967 записей.Как будто where clause был проигнорирован!Я считаю, что происходит то, что OleDb интерпретирует подчеркивание как односимвольный подстановочный знак сам по себе, и поэтому фильтрация не происходит.

И, таким образом, моя проблема в итоге: я не могу понять, как сказать Access (черезOleDb), что Я хочу использовать подчеркивание как литерал , а не подстановочный знак, в окружении % в запросе подстановочного знака.Как это сделать?(Я попытался выбрать подчеркивание с помощью \ и \\, но без игры в кости.)

1 Ответ

2 голосов
/ 23 апреля 2019

Поместите подчеркивание в «диапазон символов», ограниченный квадратными скобками. Затем Access поймет, что вы хотите, чтобы он воспринимался как буквенный символ подчеркивания, а не как подстановочный знак режима ANSI 92 (который вы используете с OleDb), который соответствует любому отдельному символу.

WHERE OptionID Like '%[_]%'
...