У меня есть база данных Pervasive, с которой я подключаюсь к C++. Все мои запросы до сих пор параметризованы, то есть "SELECT USER.NAME FROM USER WHERE USER.ID = ?"
, и это отлично работает. Но в поисковом запросе я использую LIKE в предложении WHERE, и, похоже, я не могу использовать параметры и wild chars (%).Использование параметризованного SQL с LIKE в предложении WHERE (Pervasive SQL)
Мой запрос выглядит примерно так: "SELECT * FROM DOG WHERE DOG.NAME LIKE '%?%'"
, и поскольку есть два 'вокруг параметра? -mark, это не удается, он искал собак с? -маркой в их имени. В SQL Server это, вероятно, будет решаться путем объединения строки, такой как "SELECT * FROM DOG WHERE DOG.NAME LIKE '%' + ? + '%'"
, но это недопустимый синтаксис в Pervasive (см. Нижнюю часть этой страницы: http://ww1.pervasive.com/library/docs/psql/950/sqlref/sqlref-04-55.html).
Я также попытался добавить% -signs к самому параметру, но это тоже не работает.
Кто-нибудь знает об этом?
EDIT1: Некоторые примеры C++ код:
CString sqlCommand = "SELECT * FROM DOG WHERE DOG.NAME LIKE ?;";
m_pAdoCommand->CommandText = _bstr_t(sqlCommand);
m_pAdoCommand->Parameters->Append(m_pAdoCommand->CreateParameter("p0", adVarChar, adParamInput, 25, _bstr_t("'%bob%'")));
m_pAdoRecordset = m_pAdoCommand->Execute(NULL,NULL,adCmdText);
(m_pAdoCommand
является _CommandPtr
и m_pAdoRecordset
является _RecordsetPtr
я изменил название таблиц SQL в этом примере так, что они делают. sens здесь.)
Приведенный выше код вернет строку с собакой, которая имеет имя '%bob%'
, но я бы хотел, чтобы она вернула всех собак, у которых есть боб на их имя.
Проблема при добавлении wildchars к самому параметру состоит в том, что они рассматриваются как строка, поэтому передача строки «% bob%» будет возвращать только строку, если имя собаки равно «% bob%», , Я добавлю пример кода в свой ответ. – fredrik
Но вы используете оператор LIKE, не так ли? –
Да, извините, пример был обновлен (и проверял код снова, чтобы быть уверенным) – fredrik