从数组中向数据表插入数据

4

我将加入datatables以创建一个新的datatable,

代码:

var row = from r0w1 in dt_vi.AsEnumerable()
              join r0w2 in dt_w.AsEnumerable()
              on r0w1.Field<int>("ID") equals r0w2.Field<int>("iD")
              join r0w3 in dt_re.AsEnumerable()
              on r0w1.Field<int?>("ID") equals r0w3.Field<int?>("id")
              join r0w4 in dt_def.AsEnumerable()
              on r0w1.Field<int?>("ID") equals r0w4.Field<int?>("id") into ps
              from r0w4 in ps.DefaultIfEmpty()
              select r0w1.ItemArray.Concat(r0w2.ItemArray.Concat(r0w3.ItemArray.Concat(r0w4 != null ? r0w4.ItemArray : new object[] { }))).ToArray();


foreach (object[] values in row)
    dt.Rows.Add(values);

在上述代码中,
foreach (object[] values in row)
    dt.Rows.Add(values);

当处理数十万行数据时,速度会变慢。我想将row的数据放入dt数据表中。我尝试过

dt=row.CopyToDataTable();

但是它一直报错。

我如何在这里使用CopyToDataTable()函数来避免循环?


1
https://msdn.microsoft.com/zh-cn/library/bb386921(v=vs.110).aspx 顺便说一句,这并没有什么帮助。DataTable是一个内存表,显然不建议在其中存储如此庞大的数据。 - Rahul Singh
4
CopyToDataTable方法也会使用循环。 - Tim Schmelter
@TimSchmelter,有没有更好的方法可以使用,因为我使用的上述方法不够高效!!或者我能否使用CopyToDataTable? - Harshit
1
可能是Copy to Datatable的重复问题。 - James Z
1
你有没有考虑使用SqlBulkCopy将行添加到数据库表中? - Steve Ford
显示剩余4条评论
1个回答

0

如果数据表绑定到任何内容,请关闭通知。

dt.BeginLoadData(); //  stops notifications on each addition
foreach (object[] values in row)
    dt.Rows.Add(values);
dt.EndLoadData();

移除 .ToArray(); 部分以避免再次循环每一行。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接