使用参数化SQL和LIKE in WHERE子句(普及SQL) 我有一个遍布数据库的连接,我用C++连接。 到目前为止,我的所有查询都是参数化的,即“从USER WHERE USER.ID=?”中选择USER.NAME”, 这很好。 但在搜索查询中,我使用WHERE子句中的类似语句,然后似乎无法使用参数和通配符(%)
我的查询类似于这样的使用参数化SQL和LIKE in WHERE子句(普及SQL) 我有一个遍布数据库的连接,我用C++连接。 到目前为止,我的所有查询都是参数化的,即“从USER WHERE USER.ID=?”中选择USER.NAME”, 这很好。 但在搜索查询中,我使用WHERE子句中的类似语句,然后似乎无法使用参数和通配符(%),sql,parameters,sql-like,pervasive,Sql,Parameters,Sql Like,Pervasive,我的查询类似于这样的“SELECT*FROM DOG WHERE DOG.NAME类似于“%”?%”“,由于参数?%标记周围有两个“?”,因此该查询失败,它搜索名称中带有?%标记的狗。在SQL Server中,这可能会通过连接字符串(如“SELECT*FROM DOG WHERE DOG.NAME,如“%”+?+“%”)来解决,但这在通用语法中是无效的(请参阅本页底部:) 我还尝试将符号添加到参数本身,但这似乎也不起作用 有人知道这个问题的解决办法吗 编辑1: 一些C++代码示例: CStrin
“SELECT*FROM DOG WHERE DOG.NAME类似于“%”?%”“
,由于参数?%标记周围有两个“?”,因此该查询失败,它搜索名称中带有?%标记的狗。在SQL Server中,这可能会通过连接字符串(如“SELECT*FROM DOG WHERE DOG.NAME,如“%”+?+“%”)来解决,但这在通用语法中是无效的(请参阅本页底部:)
我还尝试将符号添加到参数本身,但这似乎也不起作用
有人知道这个问题的解决办法吗
编辑1:
一些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
是一个\u CommandPtr
,而m_padocorecordset
是一个\u RecordsetPtr
。我在本例中更改了SQL表的名称,以便它们在这里有意义。)
上面的代码将返回一行,其中一只狗的名称为'%bob%'
,但我希望它返回所有名称中包含bob的狗。为什么不在分配给参数的值中添加一个通配符
这意味着,您的查询
SELECT * FROM dog WHERE dog.name LIKE ?
然后,将值“%bob%”分配给该参数,例如。
我看到你说你也试过这个,但它不起作用,这很奇怪。你能告诉我你做了什么吗
我还看到在一个示例中,您在参数周围加了引号。这听起来不是个好主意,因为这样参数就不再被识别为参数了。此时,它只是一个字符串。将wildchars添加到参数本身时的问题是,它们被视为一个字符串,因此,如果dog.name等于“%bob%”,则传递字符串“%bob%”只会返回一行。我将在我的答案中添加一些代码示例。但是您确实使用了LIKE运算符,不是吗?是的,我使用了,很抱歉,示例已更新(并再次测试代码以确保正确性),似乎我没有尝试只传递“%bob%”而不是“%bob%”。(我知道我试过了,但一定是出了什么问题,因为现在它起作用了)