0

有人能告诉我用 Windows Azure SQL 数据库中的数据生成 XML 文件的最佳方法吗?

基本上,我想通过查询某个表来使用来自 Windows Azure SQL 数据库的数据创建一个 XML,并且数据很大(大约 90 MB)。因为我需要至少每隔几个小时运行一次这项工作,所以它应该表现得非常好。

有什么建议么 ?

谢谢, 普拉夫

4

2 回答 2

0

这是一个非常笼统的问题,并不是特别针对 SQL Azure,所以很难给你一个好的答案。我建议您研究查询 SQL 数据库的不同方法,以及编写 XML 的不同方法。这可能会给你一些更具体的问题的想法。

90MB 并不是特别大 - 放入内存应该不难。但尽管如此,您可能需要考虑一次仅将一小部分数据保留在内存中的方法。例如,从 a 读取数据SqlDataReader并立即将其写入 a XmlTextWriter,或类似的东西。

于 2013-01-16T16:16:24.017 回答
0

一种方法是查询数据库并将结果保存到 ADO.net DataTable。获得 DataTable 后,使用 TableName 属性为其指定一个名称。然后使用 DataTable 的 WriteXml 方法将 DataTable 保存到您选择的位置。确保指定 XmlWriteMode.WriteSchema 以确保保存架构和数据。

请注意,如果数据表将是 2Gb 或更大,您将达到 .Net 的默认对象内存限制。一种解决方案是将您的查询分成更小的块,并在每个原始查询中以 XML 格式存储多个数据表。另一种解决方案是将 .Net 中对象的最大大小增加到大于 2Gb。这伴随着它自己的一系列风险和性能问题。但是,要超过 2Gb 对象大小限制,请确保您的应用程序是 64 位的,应用程序编译为 .Net 4.5 或更高版本,并且 app.config 文件应该启用 gcAllowVeryLargeObjects="true"。

using System.Data;
using System.Data.SqlClient;

string someConnectionString = "enter Aure connection string here";
DataTable someDataTable = new DataTable();
SqlConnection someConnection = new SqlConnection(someConnectionString);
someConnection.Open();
SqlDataReader someReader = null;
// enter your query below
SqlCommand someCommand = new SqlCommand(("SELECT * FROM [SomeTableName]"), someConnection);
// Since your are downloading a large amount of data, I effectively turned the timeout off in the line below
someCommand.CommandTimeout = 0;
someReader = someCommand.ExecuteReader();
someDataTable.Load(someReader);
someConnection.Close();
// you need to name the datatable before saving it in XML
someDataTable.TableName = "anyTableName";
string someFileNameAndLocation = @"C:\Backup\backup1.xml";
// the XmlWriteMode is necessary to save the schema and data of the datatable
someDataTable.WriteXml(someFileNameAndLocation, XmlWriteMode.WriteSchema);
于 2016-09-04T03:15:40.817 回答