SQL Server参数化的SQL查询-我是否还需要转义引号?

时间:2018-07-24 14:55:55

标签: c# sql sql-server security sql-injection

假设我有以下代码(删除了无用的东西,例如连接字符串,数据集创建,设置命令类型等)。

string sql = "SELECT * FROM SomeTable WHERE Field=@ParamValue";

using (SqlConnection conn = new SqlConnection())
using (SqlCommand cmd = new SqlCommand(sql, conn))
{
    cmd.Parameters.Add(new SqlParameter("ParamValue", someValue));
    da.Fill(ds);
}

这样使用参数化查询是否足以确保防止SQL注入的安全性,还是在将其作为参数传递之前是否需要先去除someValue中的引号?

1 个答案:

答案 0 :(得分:2)

否,您不需要转义引号。使用SQLParameters执行SQLCommand时,永远不会将参数直接插入到语句中。

相反,将调用名为sp_executesql的系统存储过程,并为其指定SQL字符串和参数数组(TDS协议)。

将参数隔离并将其视为数据。这样可以减轻对SQL注入的担心,并提供其他好处,例如强类型化和改进的性能。