你被告知什麼是確實是正確的:你應該總是使用COMMANDE對象,以防止SQL注入。使用參數化查詢,您將所有的安全和參數的ADO層(雖然你還是應該做自己適當的驗證)驗證,你甚至可能會得到一些性能改進(這些參數化查詢由SQL Server緩存)
當你執行一個命令,你有兩個選擇:要麼你的SQL執行返回行(SELECT語句,或者一些存儲過程),那麼你必須使用記錄來存儲這些行,要麼不不(更新,刪除,其他程序),那麼你有理由執行命令,不用擔心記錄集。
編輯:只是爲了確保一切都清楚了你,我用詹姆斯·懷斯曼的代碼上面,它適用於你的例子:
Dim oStoredProc : Set oStoredProc = Server.CreateObject("ADODB.Command")
With oStoredProc
.ActiveConnection = oDBConnection
.CommandType = adCmdStoredProc
.CommandText = "spTest ?"
.Parameters.Append(.CreateParameter("id", ADODB.adInteger, ADODB.adParamInput, id, 11))
Dim rs : Set rs = .Execute()
End With
Set oStoredProc = Nothing
沒有測試,但是應該是確定:-)
最後但並非最不重要的:即使你現在保護得很好,不要忘記,如果你在你的存儲過程中使用動態SQL,你可能仍然有一個SQL注入安全漏洞(只要你連接字符串來創建SQL你可能會容易我會說)!
謝謝。 這樣說,就像我給出的例子一樣,我知道參數將是數字,並且我已驗證輸入以確保它是。按照我所描述的方式使用記錄集對象會好嗎,還是應該使用命令對象?我只問很多時間,只有數值是我經歷的,如果我不必經歷和改變它們,它會爲我節省很多時間。 謝謝 – chester600 2010-08-06 14:56:25