现在有2个DataTable,
一个已经有了纪录,另外一个是补充纪录,2张表的结构相同。我想把另外一个DataTable里面的Row全部复制到第一个表,而不用循环操作后,2号表纪录全部最加到1号表末尾。
如果用循环,,太慢,特别是数据量大,好多行用集合操作。给点提示,最好给代码

解决方案 »

  1.   

    DataTable tb1 = new DataTable();
    DataTable tb2 = new DataTable();
    tb2.Rows.Add(tb1.Rows);
      

  2.   

    DataTable.Copy 方法
    复制该 DataTable 的结构和数据。返回值
    新的 DataTable,它具有与该 DataTable 相同的结构(表架构和约束)和数据。[C#] 
    private void CopyDataTable(DataTable myDataTable){
        // Create an object variable for the copy.
        DataTable copyDataTable;
        copyDataTable = myDataTable.Copy();
        // Insert code to work with the copy.
     }
      

  3.   

    private void CopyDataTable(DataTable myDataTable){
        // Create an object variable for the copy.
        DataTable copyDataTable;
        copyDataTable = myDataTable.Copy();
        // Insert code to work with the copy.
     }
      

  4.   

    用dataTable.copy()方法吧
    这个应该是没问题的
    但lz多测试一下,会不会两张表修改一张影响到另一张
    呵呵
      

  5.   

    有人比我快啊
    也是来自msdn的方法
    呵呵
      

  6.   

    DataTable.ImportRow 方法将 DataRow 复制到 DataTable 中,保留任何属性设置以及初始值和当前值。
    [C#]
    public void ImportRow(
       DataRow row
    );参数
    row 
    要导入的 DataRow。 备注
    调用 NewRow 时将使用现有的表架构向表中添加一行,并为该行填充默认值,同时将 DataRowState 设置为 Added。调用 ImportRow 将保留现有的 DataRowState 以及该行中的其他值。
      

  7.   

    .Rows.Add()匹配DataRow
     
    tb2.Rows.Add(tb1.Rows);
    tb1.Rows 是集合,System.Data.DataRowCollectionAdd()里面匹配的是 DataRow要是那么简单,我就不用提问了
      

  8.   

    楼上的应该不行吧,等号应该是赋值,最后2个DT都是相同的数据了.
    ImportRow加入的是单行数据..
      

  9.   

    如果嫌太慢了.可以考虑使用异步复制,但还是要用到遍历.datatable.copy 我没有使用过,但是看楼上几位讲的,我估计是属于整个复制过去.至于会不会覆盖掉原表中的数据,值得测试.
      

  10.   

    “System.Data.DataTableCollection.this[int]”赋值 -- 它是只读的
    拷贝应该不行,
    if(ds_Pri_NoPay.Tables[0].Rows.Count!=0)
    {
    MainDs.Tables[0]=ds_Pri_NoPay.Tables[0].Copy();
    }
    Copy只是2号表的方法,第一张表的方法没有改一个等号,还不是复职
      

  11.   

    2张表的结构相同,使用DataSet.Merge 方法进行合并。
    DataSet ds = new DataSet();
    DataTable dt1 = new DataTable();
    //添加dt1数据
    //...
    ds.Tables.Add(dt1);DataTable dt2 = new DataTable();
    //添加dt2数据
    //...
    ds.Merge(dt2);//合并dt1和dt2的数据。
      

  12.   

    我觉的DataSet.Merge方法在速度方面可能会更慢,因为还要比较表结构.然后再ImportRow
      

  13.   

    我觉得不管用什么方法,最后还是逃不了循环,比如:DataSet.Merge,里面的代码肯定有循环
      

  14.   

    解决了,用Merge可以
    我觉得,不管Merge是不是内部有循环,他的循环效率肯定比我高而且它的内部操作出问题可能性会小的多
    .net任务量大的时候,根本不能确切的执行代码
    鬼知道 每个新线成来一次循环,循环会不会在循环过程中中断,或者出现异常
    特别是循环1万次,10万次。。猜想:不知道是不是对,不要见笑我写的循环,那是在托管环境下工作的,
    Merge里面的内部循环,应该是 非托管环境下的
    如果是非托管的,效率肯定高N倍
      

  15.   

    虽然.net代码是托管环境下,但是肯定有非托管的东西在里面申请内存空间。读取特定的对象。。net FramWork,自己所处的环境应该是非托管的,被它控制的(我们写的代码)。应该都是在他控制下的,都是托管
    所以,我觉得,始终是他的效率高
      

  16.   

    不明白楼主的意思?难道楼主把数据都放到 DataTable里面了吗?而没有放到数据库里?奇怪?!如果是放在数据库里的话,为什么不用 union 连接两个表的记录呢?
      

  17.   

    select 1 
    union 
    select 2