我有一个使用C++连接到的Pervasive数据库。 到目前为止,我所有的查询都是参数化的,即"SELECT USER.NAME FROM USER WHERE USER.ID = ?"
, ,这工作正常。 但在搜索查询中,我在WHERE子句中使用LIKE,然后看起来我不能使用参数和通配符(%)。在WHERE子句中使用带LIKE的参数化SQL(普适SQL)
我的查询看起来像这样"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%'
的狗的行,但我希望它返回所有在他们的名字中有bob的狗。
将wildchars添加到参数本身的问题是,它们被视为字符串,因此如果dog.name等于'%bob%',那么传递字符串'%bob%'将仅返回一行。 。我会在我的答案中添加一些代码示例。 – fredrik 2009-07-10 09:24:19