Как связать параметры SqlCommand при использовании поля XML modify () в C # - PullRequest
1 голос
/ 09 мая 2011

У меня проблемы с экранированием SQL для использования в поле XML с помощью функции modify ():

пример кода:

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

@ id может быть связан в C # с помощью SqlCommand.Parameters.Add (..), но xml_string, находящийся внутри метода изменения, не разрешит привязку параметров.

Так что, если я хочу защитить от внедрения SQL, что мне делать с этим xml_string?Существует ли метод SQL Escape, аналогичный System.Security.SecurityElement.Escape ()?

1 Ответ

0 голосов
/ 09 мая 2011

O.k. Я наконец заставил это работать:

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;
...