我有一个使用 C++ 连接到的 Pervasive 数据库。到目前为止,我的所有查询都是参数化的,即"SELECT USER.NAME FROM USER WHERE USER.ID = ?"
,并且工作正常。但是在搜索查询中,我在 WHERE 子句中使用了 LIKE,然后似乎我不能使用参数和通配符 (%)。
我的查询看起来像这样"SELECT * FROM DOG WHERE DOG.NAME LIKE '%?%'"
,由于参数 ?-mark 周围有两个 ',因此失败,它搜索名称中带有 ?-mark 的狗。在 SQL Server 中,这可能会通过连接字符串 like 来解决"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
是 a _CommandPtr
,并且m_pAdoRecordset
是 a _RecordsetPtr
。我在这个例子中更改了 SQL 表的名称,以便它们在这里有意义。)
上面的代码将返回一行带有名字的狗'%bob%'
,但我希望它返回所有名字中有 bob 的狗。