我应该在将值发送到参数化查询之前转义单引号吗?

Should I Escape Single Quotes Before Sending a Value to a Parameterized Query?

我被告知(或在某处读到)当您使用参数化查询(例如使用 ADODB.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 

这是真的;当您将命令对象与参数对象结合使用时,参数化由命令对象完成。

您可以通过传递 "'" 并观察没有错误来验证这一点,或者通过 运行 跟踪并查看 sp_executeSQL 调用。