Как проверить, является ли значение поля определенной длины символа в команде OLDEB sql select? - PullRequest
0 голосов
/ 05 мая 2011

Я читаю из базы данных доступа, используя соединение C # OleDB. Мне не нужны результаты длиной менее трех символов.

Мой текущий код отображает ошибку «Неверная строка шаблона». Почему я получаю эту ошибку и как ее исправить?

string qry = "Select * from Table1 where ((CALLNO not like '') and " + 
             "((CALLNO like '%" + suggestedCallNo + "%') or ('" + suggestedCallNo + "' like '%' & CALLNO & '%')) and " +
             "((Len(CALLNO))>=3))";
OleDbCommand myCommand = new OleDbCommand(qry, myConnection);
OleDbDataReader myReader = myCommand.ExecuteReader();

Без ((Len(CALLNO))>=3) этот код работает нормально. Однако, как только я добавляю строку, я получаю исключение "Недопустимая строка шаблона" , когда оно запускается для выполнения программы чтения.

Несколько вещей, которые я пробовал:

Вместо ((Len(CALLNO))>=3) используйте (CALLNO not like ''), это не вызывает никаких ошибок, поэтому я не пропускаю скобки.

Попытка использовать подстановочные знаки из одного символа, такие как '_', '_ _', '_ _ _', поэтому вместо ((Len(CALLNO))>=3) я использовал (CALLNO not like '_'), это приводит к той же "Неверной строке шаблона" . Фактически единственное, что я обнаружил, чтобы не выдавать ошибку, - это пустая строка '' и полный шаблон '%'.

Я также запустил запрос из строки запроса непосредственно при доступе, и там я не получаю никаких ошибок.

Спасибо за любую информацию,

LMB

1 Ответ

1 голос
/ 05 мая 2011

Вместо _, вы должны использовать ?:

Шаблоны, которые вы можете выбрать:

  • * позволяет вам соответствовать любой строкелюбой длины (включая нулевую длину)
  • ?позволяет сопоставить по одному символу
  • # позволяет сопоставить по одной числовой цифре

http://www.techonthenet.com/access/queries/like.php

Так что вы должны иметь возможностьиспользовать LIKE '???%'

РЕДАКТИРОВАТЬ: Как отметил Дэвид, это должно быть '???*' не '???%'.Тем не менее, функция LEN также должна работать, так что, возможно, есть другая проблема.

...