当我使用参数化查询(例如,使用ADODB.Command
对象)时,我被告知(或在某处读取),所有转义都在Command对象内或数据库引擎内部处理。
这是真的吗?
我的命令代码示例如下 - 与创建的第一个参数一样传递原始参数是否安全,或者是否应该像第二个参数一样进行转义?
我的特定环境是Windows 2008(或更新版本)和SQL Server 2008(或更新版本)上的vbscript。
Dim oSproc : Set oSproc = CreateObject("ADODB.Command")
With oSproc
.ActiveConnection = oConn
.CommandText = "mysp_SPNAME"
.CommandType = adCmdStoredProc
With .Parameters
.Append oSproc.CreateParameter("@IN_str1", adVarChar, adParamInput, 255, myStr)
.Append oSproc.CreateParameter("@IN_str2", adVarChar, adParamInput, 255, replace(myStr, "'", "''"))
End With
.Execute
End With
答案 0 :(得分:2)
它的真实;参数化是在Command对象与Parameter对象结合使用时完成的。
您可以通过传递"'"
并观察没有错误,或者通过运行跟踪并查看sp_executeSQL调用来验证这一点。