我有一个大的XML文件(2 Gb),需要将数据导入到sql-ce-db。XML文件有一个根标记和许多具有20个属性的相同标记(如2d表):
<Objects>
<Object ID="" name="" level="" />
<Object ID="" name="" level="" />
对于从XML到sql-ce-db的加载数据,我使用SqlCeBulkCopy
(在codeplex上)。我尝试使用DataTable
,但出现了以下错误(因为XML大于2Gb):
"System.OutOfMemoryException"
我使用XmlReader
从XML文件中读取信息:
XmlReader r = XmlReader.Create("file:////" + PathToFile);
while (r.Read())
{
if ((r.Name == "Object") && (r.HasAttributes))
{
}
}
在这种情况下,如何将IDataReader
与XmlReader
一起用于SqlCeBulkCopy
(任何示例)?
使用List,只加载10000行/记录,然后大容量复制这些行/记录并继续。内存中无法容纳2 GB的XML文件!
所以在while循环外添加(伪代码):
var list = new List<MyObjects>();
在你的while循环中添加:
var myObject = new MyObject();
myObject.Property1 = value from xmlreader;
myObject.Property2 = anotherValue from xmlreader;
list.Add(myObject);
if (list.Count == 10000)
{
//run BulkCopy
list.Clear();
}