我有大型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超过2 Gb):
&#34;的System.OutOfMemoryException&#34;
我使用XmlReader
从XML文件中读取信息:
XmlReader r = XmlReader.Create("file:////" + PathToFile);
while (r.Read())
{
if ((r.Name == "Object") && (r.HasAttributes))
{
}
}
在这种情况下(任何示例)如何使用IDataReader
XmlReader
用于SqlCeBulkCopy
?
答案 0 :(得分:0)
xmlReader和DbDataReader不相关。但是SqlCeBulkcopy支持List和DataTable对象以及DbDataReader
使用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();
}