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

.net 将数据从一个数据集循环并复制到另一个数据集的最快方法,.net,ado.net,dataset,.net,Ado.net,Dataset,我有一个数据集,其中包含2个相关数据表(主数据表和详细数据表)。我想将与我的过滤器匹配的数据(例如主数据列A=“XXX”)复制到另一个数据集 现在我发现这个过程需要很长时间(1k记录大约需要一个小时) 我想知道如何缩短处理时间?您可能想试试 myDataSet.Tables[0].Select("A = 'xxx'"); 它返回DataRow[]更详细地概述您的问题可能会从中获得一些好处-可能有一个比复制数据更好的选择 如果您真的想走这条路,您可能想看看DataView类: 这将允许您基于

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

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

我想知道如何缩短处理时间?

您可能想试试

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

它返回
DataRow[]

更详细地概述您的问题可能会从中获得一些好处-可能有一个比复制数据更好的选择

如果您真的想走这条路,您可能想看看DataView类:

这将允许您基于筛选器从数据表中提取数据。DataView还有一个方法ToTable:

这将基于DataView中的选定行返回datatable


这应该比您的版本执行得更好,尽管我不确定其他选项是否会再次提供更快的实现。我相信上面的DataTable.Select比DataView性能更好,我认为复制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;

这是没有道理的。如果您有一个数据集,这意味着它在内存中,有1K条记录,即使您反复循环并比较每行10次,也不会花费一个小时。在数据集上显示code.EnforceConstraints,就像它只是内存数据集的约束一样,而不是回到实际的数据库约束。如果您使用DataAdapter填充了一个简单的表,那么通常不存在约束。