如何读取 FOR XML SQL Server 查询的完整结果?

Posted

技术标签:

【中文标题】如何读取 FOR XML SQL Server 查询的完整结果?【英文标题】:How to read complete result of FOR XML SQL Server Query? 【发布时间】:2019-12-06 05:11:13 【问题描述】:

我想将FOR XML SQL 查询的完整结果保存到文件中。

我的 SQL 查询看起来像这样:

SELECT * FROM Customer FOR XML RAW

在我的代码中,我现在想针对 SQL Server 执行此查询并读取完整的 XML 结果并将其保存到磁盘。

我的代码如下所示:

using (XmlReader xmlResultReader = command.ExecuteXmlReader()) //command is my SqlCommand
using (MemoryStream resultFile = new MemoryStream())
using (StreamWriter writer = new StreamWriter(resultFile, Encoding.UTF8))

    while (xmlResultReader.Read())
    
        writer.WriteLine(xmlResultReader.ReadOuterXml());
    


    //write stream to file


但是当我运行它时,不是完整的查询结果保存到MemoryStream。结果在生成的 XML 中的 <row /> 元素的中间被截断。所以即使返回的 XML 也是无效的。

我还尝试使用以下代码使用XmlWriter 编写结果:

xmlWriter.WriteNode(xmlResultReader, false);

但这显示了相同的结果。

所以现在我的问题是:如何从ExecuteXmlReader() 返回的XmlReader 中获取查询的完整 XML 结果?

【问题讨论】:

你试过How to create an XML file from a XmlReader?。这看起来是重复的,因为该问题中的XmlReader 也由SqlCommand.ExecuteXmlReader()返回 我尝试使用 XmlWriter 的 WriteNode 方法来执行此操作。但正如我上面所写,这也会截断我的 xml 结果。 在那个问题中他们设置了CommandTimeout = 60000;。这可能是问题吗? Format XML Returned from SQL Server 看起来也很相似。 很遗憾没有。我尝试将其设置为与问题相同的值,但没有任何变化。该命令毫无例外地完成,生成的 xml 不是我在 SSMS 中使用此查询获得的完整结果。 也可能相关:***.com/a/40775242 【参考方案1】:

我认为,DataSet 最适合这种要求。将文件保存到磁盘需要时间,你不能使用SqlDataReader 或 XMLdataReader 保持连接这么长时间。

    在数据集中加载结果集。 循环数据集 验证xml文件是否为正版。

    将文件一一保存到磁盘。

    XmlDocument xdoc = new XmlDocument(); xdoc.LoadXml(yourXMLString); xdoc.Save("C:\myfilename.xml");

【讨论】:

以上是关于如何读取 FOR XML SQL Server 查询的完整结果?的主要内容,如果未能解决你的问题,请参考以下文章

sql server 2000中如何使用xml for path来进行字符串拼接

在SQL Server 2012中读取XML数据

从 SQL Server 读取 XML

sql server 2000中如何使用xml for path来进行字符串拼接

Sql Server FOR XML PATH

SQL Server For XML