以下代码未返回任何结果:
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并尝试修复我的但没有运气
非常感谢任何帮助
答案 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") & "%"
ADODB.Command
对象时的有用提示)