Le code suivant transmet un paramètre XML à une procédure stockée. Le SqlXml est converti à partir d'une chaîne.Le code XML assigné au paramètre SqlXml est-il codé en plus?
var range = GetXml("<Range><Column Name=\"Id\" Low=\"5002\" High=\"8076\" /></Range>");
cmd.Parameters.Add(new SqlParameter("@Range", SqlDbType.Xml) { Value = range });
SqlXml GetXml(string s)
{
var memoryStream = new MemoryStream();
var settings = new XmlWriterSettings();
settings.OmitXmlDeclaration = true;
settings.ConformanceLevel = ConformanceLevel.Fragment;
using (var xmlWriter = XmlWriter.Create(memoryStream, settings))
{
xmlWriter.WriteString(s);
return new SqlXml(memoryStream);
}
}
Cependant, il se trouve la valeur réelle XML transmis à la procédure stockée est
N'<Range><Column Name="Id" Low="5002" High="8076" /></Range>'
La valeur a été capturée à l'aide de profils SQL Server.
Comment puis-je supprimer le codage supplémentaire de < et>?
Utilisation: System.Net.WebUtility.HtmlDecode (chaîne); – jdweng
Il semble qu'il soit codé sur la bibliothèque ado.net. La fonction ne résoudra pas le problème – ca9163d9
Cela me semble bien: string input = "N '<Plage> < Nom de la colonne = \" Id \ "Bas = \" 5002 \ "Élevé = \" 8076 \ "/ > </Plage > '"; sortie de chaîne = System.Net.WebUtility.HtmlDecode (entrée); – jdweng