2015-09-07 59 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