我有一个使用C ++连接的Pervasive数据库。
到目前为止我的所有查询都是参数化的,即"SELECT USER.NAME FROM USER WHERE USER.ID = ?"
,
这很好。
但是在搜索查询中我在WHERE子句中使用LIKE,然后似乎我不能使用参数和野性字符(%)。
我的查询看起来像这个"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表的名称,以便他们在这里发表意见。)
上面的代码将返回一行名为'%bob%'
的狗,但我希望它能返回所有名字中都有鲍勃的狗。
答案 0 :(得分:6)
为什么不在分配给参数的值中添加通配符?
所以,这意味着,您的查询看起来像
SELECT * FROM dog WHERE dog.name LIKE ?
然后,您将值'%bob%'分配给此参数。 我看到你说你也试过这个,但它不起作用,这很奇怪。你能展示你所做的代码吗?
我还看到你在一个例子中为参数添加了引号。这听起来不是一个好主意,因为那时参数将不再被识别为参数。那时,它只是一个字符串。