使用引号将参数传递给SQL Server SP

时间:2011-11-02 13:54:35

标签: c# sql stored-procedures parameters sqlcommand

我正在使用C#中的SqlCommand类在SQL服务器上执行存储过程。目前,我只构建一个执行字符串,将参数值解析为存储过程,然后在服务器上执行字符串。问题是,当我有引号时,字符串没有正确传递

是否可以使用SqlParameter对象传入参数而不必担心转出引号?

3 个答案:

答案 0 :(得分:1)

简单地说,是的 - 你应该使用SqlParameter对象而不是字符串连接,至少要防止SQL注入攻击。

答案 1 :(得分:1)

是的,这是发送参数的首选方式。

示例:

using (SqlCommand cmd = new SqlCommand("SomeProcedure", connection) {
  cmd.Parameters.Add("@Id", SqlDbType.Int).Value = 42;
  cmd.Parameters.Add("@Text", SqlDbType.Varchar, 50).Value = "A string value";
  cmd.ExecuteNonQuery();
}

答案 2 :(得分:0)

使用SqlParameter时,您可以指定参数的类型和大小。这样做可以确保重复使用执行计划(虽然这不是StoredProcs的问题),但也确保您不必担心转义和引用 - 这一切都是为您完成的。