fre*_*rik 4 sql parameters pervasive sql-like
我有一个使用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);
Run Code Online (Sandbox Code Playgroud)
(m_pAdoCommand是一个_CommandPtr,并且m_pAdoRecordset是一个_RecordsetPtr.我在这个例子中更改了SQL表的名称,以便它们在这里变得敏感.)
上面的代码将返回一行有一个名字的狗'%bob%',但我希望它返回所有在他们的名字中有鲍勃的狗.
为什么不在分配给参数的值中添加通配符?
所以,这意味着,您的查询看起来像
SELECT * FROM dog WHERE dog.name LIKE ?
Run Code Online (Sandbox Code Playgroud)
然后,您将值'%bob%'分配给此参数.我看到你说你也试过这个,但它不起作用,这很奇怪.你能展示你所做的代码吗?
我还看到你在一个例子中为参数添加了引号.这听起来不是一个好主意,因为那时参数将不再被识别为参数.那时,它只是一个字符串.