将大型XML文件导入SQL Server CE

时间:2015-04-03 06:36:17

标签: c# xml sql-server-ce

我尝试将数据从XML文件导入SQL Server CE数据库。我使用ErikEJ SQL Server Compact Bulk Insert Library(来自NuGet)this library on codeplex。我创建数据库和表。然后我将XML读取到DataTable并将此DataTable导入到DB表中。

DataSet ds = new DataSet();
ds.ReadXml("myxml.xml");
DataTable table = new DataTable();
table = ds.Tables[0];
String connString = @"Data Source = test.sdf";
SqlCeBulkCopy bulkInsert = new SqlCeBulkCopy(connString);
bulkInsert.DestinationTableName = "testtable";
bulkInsert.WriteToServer(table);

它适用于小型xml,但当我使用大型xml(超过1GB)时,我在ReadXml上收到此错误:

  

mscorlib.dll中的“System.OutOfMemoryException”

如何解决这个问题?

更新:我知道这个错误是因为我使用大型xml - 问题是如何优化这个算法,mayby使用缓冲区或读取xml的部分,任何想法?

1 个答案:

答案 0 :(得分:1)

没有简单的图书馆会为你解决这个问题。

您需要以流式方式(Reading Xml with XmlReader in C#)读取XML文件以避免加载整个XML文件,然后对于每个元素读取将这些添加到List或DataTable,最多说100,000个条目,然后BulkInsert那些,处理/清除所有未使用的对象并继续,直到整个文件被读取。

此外,对SqlCeBulkCopy的调用应包含在使用中以处置非托管资源:

using (SqlCeBulkCopy bulkInsert = new SqlCeBulkCopy(connString))
{
   bulkInsert.DestinationTableName = "testtable";
   bulkInsert.WriteToServer(table);
}
相关问题