SQL 参数未返回任何结果

SQL parameters not returning any results

以下代码未返回任何结果:

search = "'%" & Request.QueryString("itemname") & "%'"

Set cmd = Server.CreateObject("ADODB.COMMAND")  
Set cmd.ActiveConnection = conn

sql = ""
sql = sql & "DECLARE @search varchar;"
sql = sql & "SET @search = ?;"

sql = sql & "SELECT ID, itemname, itemtype FROM vw_items WHERE itemname LIKE @search"

    cmd.CommandText = sql
    cmd.CommandType = adCmdText

response.write("<strong>You searched for:</strong> " & search & "<br /><br 
/>")    

cmd.Parameters.Append cmd.CreateParameter("@search", adVarchar, adParamInput, 50, search)

set rs = cmd.Execute
else

    search = null
    strSQL2 =   "SELECT * FROM vw_items"
    set rs = server.CreateObject("ADODB.Recordset")
    rs.open strSQL2,conn

end if

我看过这个答案: 并尝试修复我的答案,但没有成功

如有任何帮助,我们将不胜感激

使用 ADODB.Command 时,提供程序会根据调用 Execute() 方法之前设置的 Parameters 集合推断数据类型。

正如您传入的那样

search = "'%" & Request.QueryString("itemname") & "%'"

实际上,当 SQL 由提供者执行时,它看起来像 (因为它已经知道 Parameter 是一个 VARCHAR 数据类型)

WHERE itemname LIKE ''%youritemname%''

当你真正想要的时候

WHERE itemname LIKE '%youritemname%'

这意味着当前查询正在对物理字符串 '%youritemname%' 执行 LIKE 而不是执行实际的模式匹配查询。

修复很简单,从 search 变量中删除单引号,像这样;

search = "%" & Request.QueryString("itemname") & "%"

有用的链接

  • A: How to use ASP variables in SQL statement (使用 ADODB.Command 对象时的有用提示)