У меня проблема с SQLParameter, когда я пытаюсь использовать его для хранения в столбце типа XML. Я создаю параметр SqlDbType.Xml. Похоже, что любые элементы XML, которые представляют собой только пробелы, преобразуются в закрытые элементы.
Это такое же поведение, как
SELECT CAST('<Cust><Fname>Andrew</Fname><Lname> </Lname></Cust>' as XML)
VS
SELECT CONVERT(xml, '<Cust><Fname>Andrew</Fname><Lname> </Lname></Cust>', 1)
Я удивлен, увидев это как поведение по умолчанию в SQLParameter. Есть ли способ заставить SQLParameter SqlDbType.Xml заботиться о своем пробеле? В качестве выстрела в темноте я попытался установить точность на 1, но это не помогло...
Код ниже заканчивается этим в базе данных
<Cust><Fname>Andrew</Fname><Lname /></Cust>
Как вы можете видеть, он удаляет XML-элемент пробела.
// CREATE TABLE T(c1 int primary key, c2 xml)
static void Main(string[] args) {
using (var Connection = new System.Data.SqlClient.SqlConnection("Data Source=localhost;Initial Catalog=Test;Integrated Security=SSPI;"))
{
Connection.Open();
using (var Command = Connection.CreateCommand())
{
Command.CommandText = "INSERT INTO T VALUES (1, @s)";
var XmlParameter = Command.Parameters.Add("s", System.Data.SqlDbType.Xml);
XmlParameter.Value = "<Cust><Fname>Andrew</Fname><Lname> </Lname></Cust>";
Command.ExecuteNonQuery();
}
Connection.Close();
}
Кто-нибудь знает способ решить эту проблему, который не анализирует параметр как двоичный и не преобразует его как часть команды вставки/обновления?
Command.CommandText = "INSERT INTO T VALUES (1, CONVERT(xml, @s, 1))";
Будем признательны за любую помощь или обратную связь.
<a></a>
и<a/>
полностью эквивалентны. Если это не так для того, с чем вы имеете дело, то то, с чем вы имеете дело, не является XML — это строка, очень похожая на XML. - person Damien_The_Unbeliever   schedule 21.08.2012