gpt4 book ai didi

c# - 分配给 SqlXml 参数的 XML 进行了额外编码?

转载 作者:太空宇宙 更新时间:2023-11-03 22:54:03 25 4
gpt4 key购买 nike

以下代码将 XML 参数传递给存储过程。 SqlXml 由字符串转换而来。

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);
}
}

然而,事实证明传递给存储过程的实际 XML 值是

N'&lt;Range&gt;&lt;Column Name="Id" Low="5002" High="8076" /&gt;&lt;/Range&gt;'

该值是使用 SQL Server Profiler 捕获的。

如何删除<和>的额外编码?

最佳答案

不要使用 XmlWriter.WriteString .该方法的目的是向元素添加纯文本内容,因此该方法替换了&<>/strong> 字符,包含 &<>

要将字符串视为 XML 而不是纯文本,您可以从字符串创建 XmlReader,然后将 XmlReader 传递给 SqlXml(XmlReader) constructor :

// using System.Data.SqlTypes;
// using System.IO;
// using System.Xml;

static SqlXml GetXml(string s)
{
return new SqlXml(XmlReader.Create(new StringReader(s)));
}

关于c# - 分配给 SqlXml 参数的 XML 进行了额外编码?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46290830/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com