2张DataTable,如何不用循环把一张的DataRow全部拷贝到另外一个?
现在有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




