我是参数化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
如果我直接运行查询或通过连接字符串,而再使用参数来创建它,它工作正常。它也可以正常工作,我使用一个没有撇号的客户名称。
任何帮助将不胜感激。如果可以,欢迎提供更多信息。
感谢, 添
当你发送'''作为参数值的一部分时,你不需要转义它。 –
您的查询不太清楚,但看起来您正在循环中创建名为'@ prm'的参数。那只会覆盖以前创建的参数。你必须创建一个带有不同参数的SQL字符串(比如'@ p1','@ p2','@ p3'),以便使用可变数量的参数。 – Andomar
它使用了未声明的参数,因此它会将它们全部添加为新参数,然后在IN语句中调用它们,例如“WHERE client IN(?,?,?)”。这一切都有效,而不是问题。这只是我不必要地逃避了报价。 – TimothyF