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

Posted

技术标签:

【中文标题】使用引号将参数传递给 SQL Server SP【英文标题】:Pass a parameter to SQL server SP with quotes 【发布时间】:2011-11-02 13:54:35 【问题描述】:

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

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

【问题讨论】:

【参考方案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】:

简单地说,是的 - 无论如何,您应该使用 SqlParameter 对象而不是字符串连接,作为防止 SQL 注入攻击的最低要求。

【讨论】:

听起来像是小 Bobby Tables 的工作。【参考方案3】:

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

【讨论】:

以上是关于使用引号将参数传递给 SQL Server SP的主要内容,如果未能解决你的问题,请参考以下文章

通过 url 将参数传递给 sql server 报告服务

VBA 将日期参数传递给 SQL Server 存储过程

将参数传递给 SQL Server 中的视图

将 xml 作为参数传递给 SQL Server 中的存储过程

使用 Python 将包含双引号的参数传递给子进程

在 ASP.Net Core 项目中使用 ADO.Net 将 JSON 类型作为参数传递给 SQL Server 2016 存储过程