将数据从一个DataSet循环并复制到另一个DataSet的最快方法

时间:2009-03-23 14:41:07

标签: .net ado.net dataset

我有一个DataSet包含2个相关DataTable(主数据和详细信息)。我想将与我的过滤器匹配的数据(例如主数据列A =“XXX”)复制到另一个数据集。

现在我发现这个过程需要很长时间(1k记录大约需要1小时)。

我想知道如何改善处理时间?

3 个答案:

答案 0 :(得分:2)

我说复制1000条记录应该只需几毫秒。 确保没有事件触发或数据绑定做奇怪的事情.. 也许你应该尝试没有关系,但我相信enforcecontraints = false也禁用外键检查..

以下代码可以非常快速地复制完整的数据集:

fDstDataSet.EnforceConstraints = false;
foreach (DataTable fSrcTable in fSrcDataSet.Tables)
{
    DataTable fDstTable = fOpenOrders.Tables[fSrcTable.TableName];
    foreach (DataRow fSrcRow in fSrcTable.Rows)
    {
        fDstTable.ImportRow(fSrcRow);
    }
}
fDstDataSet.EnforceConstraints = true;

答案 1 :(得分:1)

您可能想尝试一下;

 myDataSet.Tables[0].Select("A = 'xxx'");

返回DataRow[]

答案 2 :(得分:0)

您可能会在更详细地概述问题时获得一些好处 - 可能有更好的选择,然后重复您的数据。

如果你真的想沿着这条路走下去,你可能想看一下DataView类:

http://msdn.microsoft.com/en-us/library/system.data.dataview.aspx

这将允许您根据数据表中的过滤器提取数据。 DataView还有一个方法ToTable:

http://msdn.microsoft.com/en-us/library/system.data.dataview.totable.aspx

这将根据DataView中的选定行返回一个数据表。

这应该比你的版本更好,虽然我不确定其他选项是否会再次提供更快的实现。我相信上面的DataTable.Select将比DataView

表现更好