2015-09-07 32 views
0

我是参数化SQL的新手。我在.asp页面中查询了一个表单中的一个或多个客户端名称。这些被保存在一个名为clientArr的数组中,然后作为参数传递给SQL服务器。我逃避了'as'',但这似乎没有奏效。如果我使用麦当劳等客户名称运行查询,则不会返回任何结果。asp中参数化sql中的撇号/单引号

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 

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

任何帮助将不胜感激。如果可以,欢迎提供更多信息。

感谢, 添

+1

当你发送'''作为参数值的一部分时,你不需要转义它。 –

+0

您的查询不太清楚,但看起来您正在循环中创建名为'@ prm'的参数。那只会覆盖以前创建的参数。你必须创建一个带有不同参数的SQL字符串(比如'@ p1','@ p2','@ p3'),以便使用可变数量的参数。 – Andomar

+0

它使用了未声明的参数,因此它会将它们全部添加为新参数,然后在IN语句中调用它们,例如“WHERE client IN(?,?,?)”。这一切都有效,而不是问题。这只是我不必要地逃避了报价。 – TimothyF

回答

0

这方面的工作的时间太长了之后,它只是打我。像这样直接传递参数意味着我根本不需要逃避它。如果我删除了替换语句,它可以很好地保持单引号。我绝对过度思考这一点。

+0

你可以通过阅读评论保存13分钟:-) –

+0

哈,是的。我没有看到他们,没有刷新页面。但谢谢你:) – TimothyF