gpt4 book ai didi

sql-server - 从 C# .NET 中的 TSQL FOR XML 语句读取大型 XML 字符串

转载 作者:数据小太阳 更新时间:2023-10-29 01:49:39 25 4
gpt4 key购买 nike

有一个带有 FOR XML 的 SQL 命令,它返回一个长 XML 作为 SqlString。我的问题是将长 XML 字符串读入 .NET C#。

下面只读取前2033个字符

    SqlDataReader rdr = command.ExecuteReader();
if (rdr.HasRows)
{
rdr.Read();
Debug.WriteLine(rdr[0].ToString().Length.ToString());
}

我也尝试过 command.ExecuteScalar 和 rdr.GetString,但仍然只能获取前 2033 个字符。我已经改变了排序,它仍然在 2033 处被截断,所以它不太可能是由坏字符引起的。尝试了 rdr.GetSqlXml 并收到错误消息无法将 SqlString 转换为 SqlCachedBuffer。

如果我限制 SQL 返回少于 2033 个字符,我会得到完整的有效 XML。所以我不认为这是一个 XML 解析问题,而只是一个截断问题。我不需要任何 XML 解析 - 它是来自 TSQL 语句的有效 XML,我需要作为字符串。

如何阅读完整的 XML(作为文本)?

TSQL 有效。

    select top 10 docSVsys.sID, docSVsys.docID
, (select top 10 value + '; '
from docMVtext with (nolock) where docMVtext.sID = docSVsys.sID
and docMVtext.fieldID = '113'
order by value FOR XML PATH('') ) as [To]
from docSVsys with (nolock)
order by docSVsys.sID
for xml auto, root('documents')

FOR XML PATH 提供了我所需要的并且速度很快。我尝试了一个常规查询,然后使用 Xdocument 生成 XML,但性能非常糟糕,甚至超过 100 行,因为它需要搜索 sID 以添加 To。我想我可以将连接写成一个 SQL 函数来避免 FOR XML AUTO,但是使用 FOR XML 的查询很快并且提供了我需要的准确结果。只是如何检索结果?

最佳答案

这是一个已知问题,请参阅:http://support.microsoft.com/kb/310378

改用 ExecuteXmlReader。根本原因是 SQL 分解了返回的 XML,因此您需要以不同的方式阅读回复。我在使用 VBScript 的 ADO 中也遇到过同样的问题。

关于sql-server - 从 C# .NET 中的 TSQL FOR XML 语句读取大型 XML 字符串,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8477305/

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