【问题标题】:LIKE statement using parametrized SQL in vbscript在 vbscript 中使用参数化 SQL 的 LIKE 语句
【发布时间】:2015-12-03 20:24:19
【问题描述】:

我正在尝试使用参数化 SQL 在 vbscript 中创建 LIKE SQL 语句。

通过的命令文本是沿线

SET NOCOUNT ON; 
DECLARE @pname as nvarchar(50); 
SELECT @pname = ?; 
SELECT *
FROM tblProject
WHERE projName LIKE @pname

我将 % 连接到作为 pname 传递的字符串的任一侧。如果我将 LIKE 更改为 = 并删除 %s 那么它工作正常。如果我直接运行该语句并将 @pname 替换为 '%searchterm%' 它工作正常。任何帮助将非常感激。

编辑:vbscript:

Set rsAnswers = Server.CreateObject("ADODB.Recordset")
Set cmd = server.createobject("ADODB.Command")
cmd.CommandText = mySQL
cmd.CommandType = 1
cmd.CommandTimeout = 900 
cmd.ActiveConnection = svrPerformanceConnectionset prm = cmd.CreateParameter("@pname", 129, 1, 50, thisProjName)
cmd.Parameters.Append prm
rsAnswers.CursorLocation = 3
rsAnswers.Open cmd, , 0, 1

(thisProjName 正在从表单中获取字符串)

谢谢, 蒂姆

【问题讨论】:

  • 它应该适用于@pname 中的任何特殊字符,% 除外
  • 您应该发布所有 vbscript 代码。如果使用 SQL Profiler 进行跟踪,您会看到什么?
  • @Nick.McDermaid 我添加了更多可能相关的 vbscript。整个页面超过 1000 行,但包含机密信息。我希望我发布的内容就足够了 :) 我已经从其他人那里接管了这段代码,但我对 vbscript 还是很陌生。

标签: sql-server vbscript sql-parametrized-query


【解决方案1】:

这是预期的行为,因为参数值被转义以将其作为值处理。

解决方案是将%的串联移出参数:

SET NOCOUNT ON; 
SELECT *
FROM tblProject
WHERE projName LIKE '%' + @pname + '%';

请注意缺少参数的声明和初始化:初始化和赋值是由 VBScript 引擎和数据访问层在脚本中创建相关对象时执行的。

【讨论】:

  • 谢谢@Paolo。但我仍然无法让它发挥作用。您提供的代码在数据库中运行良好,但在我的 asp 页面中运行良好。我显然不能将“要搜索的文本”部分放在查询中,因为这是传递的参数。所以命令文本是这样的: SET NOCOUNT ON;将 [at]pname 声明为 nvarchar(50);选择 [at]pname = ?; SELECT * FROM tblProject WHERE projName LIKE '%' + [at]pname + '%';然后将“要搜索的文本”传递给 ADO 对象。 set prm = cmd.CreateParameter("[at]pname", 129, 1, 50, thisProjName) cmd.Parameters.Append prm
  • 请看我的编辑。因为你一开始没有发布 vb 代码,所以我认为 sql 已被编辑以进行测试。
  • 当我从 sql 中删除声明时,出现“必须声明标量变量”错误。我没有在我的 vbscript 中正确声明它吗? set prm = cmd.CreateParameter("[at]pname", 129, 1, 50, thisProjName) cmd.Parameters.Append prm
  • 在你的脚本中有 [at]pname 或 @pname?最好将脚本添加到问题中......
  • 对不起,我是这个网站的新手。我正在更改它,因此它没有将其作为用户名。我已将代码添加到问题中。
【解决方案2】:

在尝试了很多事情之后,我发现问题在于我将参数声明为的数据类型。我不确定为什么使用 adVarChar (200) 而不是 adChar (129) 使 LIKE 语句起作用。

感谢所有回答和评论的人!

【讨论】:

    猜你喜欢
    • 2015-06-03
    • 1970-01-01
    • 1970-01-01
    • 2023-03-19
    • 2010-09-20
    • 2012-12-06
    • 2014-10-31
    • 2011-06-22
    • 2011-10-08
    相关资源
    最近更新 更多