То, что вам сказали, действительно верно: вы должны всегда использовать объекты commande для предотвращения SQL-инъекций. Используя параметризованные запросы, вы оставляете всю безопасность и проверку параметров на уровне ADO (хотя вы все равно должны выполнять свою собственную надлежащую проверку), и вы можете даже получить некоторое улучшение производительности (эти параметризованные запросы кэшируются SQL Server)
Когда вы выполняете команду, у вас есть две опции: либо выполняемый вами SQL возвращает строки (оператор SELECT, либо некоторые хранимые процедуры), тогда вы должны использовать набор записей для хранения этих строк, либо это не так (ОБНОВЛЕНИЯ , DELETES, другие процедуры), то вы просто выполняете команду и не беспокоитесь о наборах записей.
Редактировать: просто чтобы убедиться, что вам все ясно, я использовал приведенный выше код Джеймса Вайзмана и адаптировал его к вашему примеру:
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, вы можете быть уязвимы, я бы сказал)!