繁体   English   中英

如何将IDataReader和XmlReader用于SqlCeBulkCopy?

[英]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))
        {

        }
    }

在这种情况下,如何将IDataReaderXmlReaderSqlCeBulkCopy一起使用(任何示例)?

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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM