我是參數化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