CSDN首页 空间 新闻 论坛 Blog 下载 读书 网摘 搜索 .NET Java 视频 接项目 求职 在线学习 买书 程序员 通知
不看会后悔的Windows XP之经验谈 简单快捷DIY实用家庭影院
CSDN社区
搜索 收藏 打印 关闭
CSDN社区 >  .NET技术 >  C#

2张DataTable,如何不用循环把一张的DataRow全部拷贝到另外一个?

楼主bbwolfcool(bb_wolf_cool)2006-03-10 17:09:35 在 .NET技术 / C# 提问

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

1 楼hyena041(陷入自己的思维中,找不到自己了)回复于 2006-03-10 17:18:14 得分 0

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

2 楼hyena041(陷入自己的思维中,找不到自己了)回复于 2006-03-10 17:19:02 得分 0

我没有测试过  
  呵呵,如果不用循环的话,怕两张表在操作的时候,会由于修改一张表影响到另一张表吧!Top

3 楼time_is_life(今夜太冷:http://timeislife.blog.sohu.com)回复于 2006-03-10 17:19:10 得分 0

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.  
    }  
  Top

4 楼hyena041(陷入自己的思维中,找不到自己了)回复于 2006-03-10 17:19:50 得分 0

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

5 楼hyena041(陷入自己的思维中,找不到自己了)回复于 2006-03-10 17:20:30 得分 0

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

6 楼hyena041(陷入自己的思维中,找不到自己了)回复于 2006-03-10 17:21:11 得分 0

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

7 楼time_is_life(今夜太冷:http://timeislife.blog.sohu.com)回复于 2006-03-10 17:21:17 得分 0

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

8 楼bbwolfcool(bb_wolf_cool)回复于 2006-03-10 17:23:07 得分 0

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

9 楼canserly(没啥不好意思)回复于 2006-03-10 17:24:08 得分 0

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

10 楼sxlfybb(房客)回复于 2006-03-10 17:25:08 得分 0

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

11 楼bbwolfcool(bb_wolf_cool)回复于 2006-03-10 17:34:59 得分 0

“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号表的方法,第一张表的方法没有改  
   
  一个等号,还不是复职Top

12 楼zhzuo(秋枫)回复于 2006-03-10 17:37:38 得分 80

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的数据。  
  Top

13 楼lidong6(立冬)回复于 2006-03-10 17:50:18 得分 10

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

14 楼zhongkeruanjian(编程亮子)回复于 2006-03-10 18:02:19 得分 10

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

15 楼bbwolfcool(bb_wolf_cool)回复于 2006-03-10 18:05:23 得分 0

还是有红星的人比较强啊Top

16 楼bbwolfcool(bb_wolf_cool)回复于 2006-03-10 18:11:46 得分 0

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

17 楼bbwolfcool(bb_wolf_cool)回复于 2006-03-10 18:16:43 得分 0

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

18 楼WZCNet(只有想不到,没有做不到)回复于 2006-03-10 18:29:05 得分 0

DataTable.Copy()方法Top

19 楼jyk(今天由我来写的代码,明天就让程序自己完成!喜欢编程。和气生财。共同提高。共同进步!)回复于 2006-03-11 10:50:40 得分 0

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

20 楼jyk(今天由我来写的代码,明天就让程序自己完成!喜欢编程。和气生财。共同提高。共同进步!)回复于 2006-03-11 10:51:34 得分 0

select   1    
  union    
  select   2Top

21 楼kingdhy(飞鹰)回复于 2006-03-11 10:58:26 得分 0

来过Top

相关问题

  • 字符串拷贝中for循环的疑问
  • 如何将一个datarow拷贝到另一个datarow.深拷贝!
  • for循环
  • for循环
  • 循环
  • 循环
  • 怎样为DataTable中的内容进行排序?要自已用循环写吗?
  • 怎样不用循环,一次删除一个datatable里的所有记录
  • DataView中数据倒入到一个新DataTable的问题(不用循环)
  • DataView中数据倒入到一个新DataTable的问题(不用循环)

关键词

  • .net
  • c#
  • 循环
  • 数据
  • 代码
  • 结构
  • ds
  • datatable
  • 表
  • copydatatable

得分解答快速导航

  • 帖主:bbwolfcool
  • zhzuo
  • lidong6
  • zhongkeruanjian

相关链接

  • CSDN .NET频道
  • .NET类图书
  • C#类图书
  • .NET类源码下载

广告也精彩

反馈

请通过下述方式给我们反馈
反馈
提问
网站简介|广告服务|VIP资费标准|银行汇款帐号|网站地图|帮助|联系方式|诚聘英才|English|问题报告
北京创新乐知广告有限公司 版权所有, 京 ICP 证 070598 号
世纪乐知(北京)网络技术有限公司 提供技术支持
Copyright © 2000-2008, CSDN.NET, All Rights Reserved
GongshangLogo