如何将IDataReader与XmlReader一起用于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大于2Gb):

"System.OutOfMemoryException"

我使用XmlReader从XML文件中读取信息:

XmlReader r = XmlReader.Create("file:////" + PathToFile);
  while (r.Read())
    {
        if ((r.Name == "Object") && (r.HasAttributes))
        {
        }
    }

在这种情况下,如何将IDataReaderXmlReader一起用于SqlCeBulkCopy(任何示例)?

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();
} 

相关内容

  • 没有找到相关文章

最新更新