如何读取 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来进行字符串拼接