SQL参数不返回任何结果

时间:2017-04-25 22:15:52

标签: sql-server vbscript parameters asp-classic adodb

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

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

我已经看到了这个答案:ADO parameterised query not returning any result并尝试修复我的但没有运气

非常感谢任何帮助

1 个答案:

答案 0 :(得分:2)

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

正如你传递的那样

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

当提供者执行SQL时生效,它看起来像(因为它已经知道Parameter已经是VARCHAR数据类型了

WHERE itemname LIKE ''%youritemname%''

当你真正想要它

WHERE itemname LIKE '%youritemname%'

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

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

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

有用的链接