我尝试将数据从XML文件导入SQL Server CE数据库。我在codeplex上使用ErikEJ SQL Server Compact批量插入库(来自NuGet)此库。我创建数据库和表。然后,我读取XMLDataTable
并将其导入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-问题是如何通过使用缓冲区或逐个读取xml来优化此算法,有什么想法吗?
没有简单的库可以为您解决此问题。
您需要以流方式读取XML文件(使用C#中的XmlReader读取Xml)以避免加载整个XML文件,然后对于读取的每个元素,将它们添加到List或DataTable中,最多可以输入100,000个条目,然后BulkInsert ,处置/清除所有未使用的对象,然后继续操作,直到读取了整个文件。
另外,对SqlCeBulkCopy的调用应包装在using中以处置非托管资源:
using (SqlCeBulkCopy bulkInsert = new SqlCeBulkCopy(connString))
{
bulkInsert.DestinationTableName = "testtable";
bulkInsert.WriteToServer(table);
}
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句