2009-07-10 2 views
4

У меня есть база данных 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%', но я бы хотел, чтобы она вернула всех собак, у которых есть боб на их имя.

ответ

6

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

Таким образом, это означает, что ваш запрос выглядит

SELECT * FROM dog WHERE dog.name LIKE ? 

И потом, вы присвоить значение «% боб%» к этому параметру, например. Я вижу, вы говорите, что тоже пробовали это, но это не работает, что очень странно. Можете ли вы показать код того, что вы сделали?

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

+0

Проблема при добавлении wildchars к самому параметру состоит в том, что они рассматриваются как строка, поэтому передача строки «% bob%» будет возвращать только строку, если имя собаки равно «% bob%», , Я добавлю пример кода в свой ответ. – fredrik

+0

Но вы используете оператор LIKE, не так ли? –

+0

Да, извините, пример был обновлен (и проверял код снова, чтобы быть уверенным) – fredrik

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