在C#中使用XML字段modify()时如何绑定SqlCommand参数

发布于 2024-11-05 18:51:27 字数 432 浏览 0 评论 0原文

我在使用modify()函数转义SQL以便在XML字段中使用时遇到问题:

示例代码:

new SqlCommand("UPDATE Table " +
  "SET xmlField.modify('insert " + xml_string + " as last into (/element)[1]') " +
  "WHERE id = @id", conn, transaction);

@id可以通过SqlCommand.Parameters.Add(..)在C#中绑定,但是xml_string位于modify方法内部,将不允许参数绑定。

那么如果我想防止 SQL 注入,我该如何处理这个 xml_string 呢?是否有类似于 System.Security.SecurityElement.Escape() 的 SQL 转义方法?

I'm having trouble escaping SQL for use in a XML field with the modify() function:

example code:

new SqlCommand("UPDATE Table " +
  "SET xmlField.modify('insert " + xml_string + " as last into (/element)[1]') " +
  "WHERE id = @id", conn, transaction);

@id can be bound in C# by SqlCommand.Parameters.Add(..), but xml_string, being inside the modify method, will not allow parameter binding.

So if I want to protect from SQL injection, what do I do with this xml_string? Is there an SQL Escape method similar to System.Security.SecurityElement.Escape() ?

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

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

发布评论

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

评论(1

养猫人 2024-11-12 18:51:27

好吧,我终于让它工作了:

new SqlCommand("UPDATE Table " +
  "SET xmlField.modify('insert sql:variable(\"@xml_string\") as last into (/element)[1]') " +
  "WHERE id = @id", conn, transaction);

然后在参数绑定中,一定要使用 XML 数据类型而不是 Char (!),否则它将无法工作:

cmd.Parameters.Add("@xml_string", SqlDbType.XML).Value = xml_string;

O.k. I finally got it to work:

new SqlCommand("UPDATE Table " +
  "SET xmlField.modify('insert sql:variable(\"@xml_string\") as last into (/element)[1]') " +
  "WHERE id = @id", conn, transaction);

and then in the parameter binding, be sure to use the XML data type and not Char (!), otherwise it won't work:

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