【问题标题】:Escaping apostrophe/single quote in parameterized sql in asp在asp中的参数化sql中转义撇号/单引号
【发布时间】:2015-09-07 15:37:10
【问题描述】:

我是参数化 SQL 的新手。我在 .asp 页面中有一个查询,该页面从表单中获取一个或多个客户端名称。它们保存在一个名为 clientArr 的数组中,然后作为参数传递给 SQL Server。我正在逃避 ' as '' 但这似乎不起作用。如果我使用像 McDonald's 这样的客户名称运行查询,它不会返回任何结果。

clientArr(y) = Replace(clientArr(y),"'","''"

...

if qsClient > "" Then
    dim booComma
    booComma = false
    if mySQLwhere > "" Then
        mySQLwhere = mySQLwhere& " AND "
    End if
    mySQLwhere = mySQLwhere & " (p.client IN ( "
    for y = 0 to Ubound(clientArr)
        if booComma = true Then 
            mySQLwhere = mySQLwhere & ","
        end if
        mySQLwhere = mySQLwhere & "?"
        booComma = true
    Next
    mySQLwhere = mySQLwhere & ")) "
end if

...

if qsClient > "" Then
    for y = 0 to Ubound(clientArr)
        Response.write clientArr(y)
        set prm = cmd.CreateParameter("@prm", 129, 1, 50, clientArr(y))
        cmd.Parameters.Append prm
    next
end if

如果我直接运行查询或通过连接字符串而不是使用参数来创建它,它工作正常。如果我使用不带撇号的客户端名称,它也可以正常工作。

任何帮助将不胜感激。如果可以的话,很乐意提供更多信息。

谢谢, 蒂姆

【问题讨论】:

  • 当您将' 作为参数值的一部分发送时,您不需要对其进行转义。
  • 您的查询不是很清楚,但看起来您正在循环中创建名为 @prm 的参数。这只会覆盖先前创建的参数。您必须创建一个具有不同参数的 SQL 字符串(如 @p1@p2@p3)才能使用可变数量的参数。
  • 它使用了未声明的参数,因此它会将它们全部添加为新参数,然后在 IN 语句中调用它们,例如“WHERE client IN (?, ?, ?)”。这一切都有效,不是问题。只是我不必要地逃避了报价。

标签: asp.net sql-server parameterized-query


【解决方案1】:

在这方面工作了太久之后,这让我很受打击。像这样直接传递参数意味着我根本不需要转义它。如果我删除该替换语句,则保留单引号就可以了。我肯定是多虑了。

【讨论】:

  • 阅读 cmets 可以节省 13 分钟 :-)
  • 哈,是的。我没有看到它们,没有刷新页面。但是谢谢你:)
猜你喜欢
  • 2014-11-21
  • 2018-09-21
  • 2018-11-15
  • 2011-01-27
  • 1970-01-01
  • 1970-01-01
  • 2011-02-08
  • 1970-01-01
相关资源
最近更新 更多