4

我有一个使用 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 的狗。

4

1 回答 1

6

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

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

SELECT * FROM dog WHERE dog.name LIKE ?

然后,例如,将值 '%bob%' 分配给此参数。我看你说你也试过这个,但是不行,很奇怪。你能显示你所做的代码吗?

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

于 2009-07-10T07:06:02.547 回答