首页 > 解决方案 > 如何读取 FOR XML SQL Server 查询的完整结果?

问题描述

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

我的 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);

但这显示了相同的结果。

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

标签: c#.netsql-serverxmlsqlcommand

解决方案


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

  1. 在数据集中加载结果集。
  2. 循环数据集
  3. 验证 xml 文件是否为正版。
  4. 将文件一一保存到磁盘。

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


推荐阅读