我应该在将值发送到参数化查询之前转义单引号吗?
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 调用。
我被告知(或在某处读到)当您使用参数化查询(例如使用 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 调用。