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

发布于 2024-12-13 13:10:16 字数 154 浏览 0 评论 0原文

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

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

I am executing a stored procedure on a SQL server using a SqlCommand class from C#. Currently I just build an execution string that parses in the parameter values to the stored procedure then executes the string on the server. The problem is when I have quotes the string does not get passed properly

Is it possible to use SqlParameter objects to pass in the parameters without worrying about escaping out of quotes?

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(3

思念绕指尖 2024-12-20 13:10:16

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

例子:

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();
}

Yes, that is the preferred way of sending parameters.

Example:

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();
}
满地尘埃落定 2024-12-20 13:10:16

简而言之,是的 - 并且无论如何您都应该使用 SqlParameter 对象而不是字符串连接,作为防范 SQL 注入攻击的最低限度。

Simply put, yes - and you should be using SqlParameter objects rather than string concatenation anyway, as a minimum to guard against SQL injection attacks.

沫尐诺 2024-12-20 13:10:16

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

When using SqlParameter you are able to specify the type and size of the parameters. Doing so ensures execution plan re-use (though that's not such an issue with StoredProcs) but also ensure that you do not need to worry about escaping and quoting - it's all done for you.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文