在WHERE子句中使用参数化SQL和LIKE(Pervasive SQL)

时间:2009-07-10 06:57:51

标签: sql parameters sql-like pervasive

我有一个使用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_CommandPtrm_pAdoRecordset_RecordsetPtr。我在这个示例中更改了SQL表的名称,以便他们在这里发表意见。)

上面的代码将返回一行名为'%bob%'的狗,但我希望它能返回所有名字中都有鲍勃的狗。

1 个答案:

答案 0 :(得分:6)

为什么不在分配给参数的值中添加通配符?

所以,这意味着,您的查询看起来像

SELECT * FROM dog WHERE dog.name LIKE ?

然后,您将值'%bob%'分配给此参数。 我看到你说你也试过这个,但它不起作用,这很奇怪。你能展示你所做的代码吗?

我还看到你在一个例子中为参数添加了引号。这听起来不是一个好主意,因为那时参数将不再被识别为参数。那时,它只是一个字符串。