如何在SqlCeBulkCopy中使用带有XmlReader的IDataReader?

时间:2015-04-10 11:34:23

标签: c# xml sql-server-ce idatareader

我有大型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

1 个答案:

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