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

C# 在C中使用XML字段modify()时,如何绑定SqlCommand参数#,c#,xml,prepared-statement,xquery,sqlcommand,C#,Xml,Prepared Statement,Xquery,Sqlcommand,我在使用modify()函数转义XML字段中使用的SQL时遇到问题: 示例代码: 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#中绑定,但是位于modif

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

示例代码:

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#中绑定,但是位于modify方法中的xml_字符串将不允许参数绑定


所以,如果我想防止SQL注入,我该如何处理这个xml_字符串?是否有类似于System.Security.SecurityElement.Escape()的SQL Escape方法?

好的。我终于让它工作了:

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;

您在xpath语句中正确引用了它吗
sql:variable(“@id”)
我尝试了简单的@xml\u字符串以及sql:variable(\“@xml\u字符串”)和{sql:variable('@xml\u字符串')}两种方法。当使用
cmd.Parameters.AddWithValue(“@xml\u字符串”,xml\u字符串)时会发生什么?@antisanity:我还没试过。我想也可以,但我喜欢额外的验证。