【发布时间】: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