【问题标题】:SQL parameters not returning any resultsSQL 参数不返回任何结果
【发布时间】:2017-04-25 22:15:51
【问题描述】:

以下代码没有返回任何结果:

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 并尝试修复我的但没有运气

任何帮助将不胜感激

【问题讨论】:

  • 因为您使用参数化查询,所以在创建参数时会推断类型,因此不需要在 search 变量周围加上单引号 (')本质上,在执行ADODB.Command 时,它正在执行WHERE itemname LIKE ''%youritemname%'',而您实际上希望它是WHERE itemname LIKE '%youritemname%'。将search 变量更改为search = "%" &amp; Request.QueryString("itemname") &amp; "%" 以修复它。
  • 你确定你使用 MySQL,因为它看起来很像 MS SQL Server T-SQL?
  • 这个“搜索”有返回值吗?

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


【解决方案1】:

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

当你传入时

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

实际上,当提供程序执行 SQL 时,它看起来像 (因为它已经知道 ParameterVARCHAR 数据类型)

WHERE itemname LIKE ''%youritemname%''

当你真正想要它时

WHERE itemname LIKE '%youritemname%'

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

修复很简单,去掉search变量的单引号,像这样;

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

有用的链接

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-07-09
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多