Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/81.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
使用参数化SQL和LIKE in WHERE子句(普及SQL) 我有一个遍布数据库的连接,我用C++连接。 到目前为止,我的所有查询都是参数化的,即“从USER WHERE USER.ID=?”中选择USER.NAME”, 这很好。 但在搜索查询中,我使用WHERE子句中的类似语句,然后似乎无法使用参数和通配符(%)_Sql_Parameters_Sql Like_Pervasive - Fatal编程技术网

使用参数化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%”。(我知道我试过了,但一定是出了什么问题,因为现在它起作用了)