[英]How to use IDataReader with XmlReader for SqlCeBulkCopy?
我有一个很大的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):
“ System.OutOfMemoryException”
我使用XmlReader
从XML文件读取信息:
XmlReader r = XmlReader.Create("file:////" + PathToFile);
while (r.Read())
{
if ((r.Name == "Object") && (r.HasAttributes))
{
}
}
在这种情况下,如何将IDataReader
与XmlReader
和SqlCeBulkCopy
一起使用(任何示例)?
xmlReader和DbDataReader不相关。 但是SqlCeBulkcopy支持List和DataTable对象以及DbDataReader
使用列表,并且仅加载说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();
}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.