c# - 如何读取 FOR XML SQL Server 查询的完整结果?
问题描述
我想将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);
但这显示了相同的结果。
所以现在我的问题是:如何从XmlReader
返回的查询中获取完整的 XML 结果ExecuteXmlReader()
?
解决方案
我认为,DataSet
最适合这种要求。将文件保存到磁盘需要时间,您不能使用SqlDataReader
XMLdataReader 保持连接这么长时间。
- 在数据集中加载结果集。
- 循环数据集
- 验证 xml 文件是否为正版。
将文件一一保存到磁盘。
XmlDocument xdoc = new XmlDocument(); xdoc.LoadXml(yourXMLString); xdoc.Save("C:\myfilename.xml");
推荐阅读
- c# - 比较程序集名称导致不匹配:修订号
- java - 如何检查 java/kotlin 中的性能时间?
- java - 使用调用其他 java 文件的对象创建两个构造函数
- python - 是否对两个 numpy 数组进行任何操作以丢弃零值?
- java - 是否可以通过 azure graph 获取访问令牌并使用它来访问 azure 存储帐户?
- android-studio - 更新到 android studio 3.5 后,我无法调试应用程序?
- c++ - GDB时如何将参数传递给函数
- python - 将numpy数组值设置为一个常量值,除了边缘上的元素
- actionscript-3 - 如何使对象在特定位置移动 flash as3
- reactjs - 如何模拟具有 fetch 调用的函数调用