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

本文关键字:modify 绑定 参数 SqlCommand 字段 XML | 更新日期: 2023-09-27 17:55:27

我在转义SQL以使用modify()函数在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 Escape方法?

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

ok.我终于让它工作了:

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;