У меня есть база данных Pervasive, к которой я подключаюсь с использованием C ++.
Все мои запросы пока что параметризованы, т.е. "SELECT USER.NAME FROM USER WHERE USER.ID = ?"
,
и это прекрасно работает.
Но в поисковом запросе я использую LIKE в предложении WHERE, а затем кажется, что я не могу использовать параметры и подстановочные знаки (%).
Мой запрос выглядит примерно так: "SELECT * FROM DOG WHERE DOG.NAME LIKE '%?%'"
, и, поскольку вокруг параметра? - два символа «два», это не удается, он искал собак с? -Маркой в их имени. В 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 в этом примере, чтобы они имели смысл здесь.)
Приведенный выше код вернет строку с собакой с именем '%bob%'
, но я бы хотел, чтобы она возвращала всех собак с бобом в их имени.