再次询问关于两个DataTable数据过滤的问题

jason87629 2012-09-03 09:34:10
之前发了个贴,因为怕问题太复杂就简单表达了下,但发现跟实际的遇到的问题有很大出入,所以再次向大家求助下。。
个人表达能力不是很好,麻烦各位有心的朋友可以看清楚我的问题,谢谢了!

我有两个数据结构一样的两个DataTable(dt1、dt2),dt1有49000多条数据,dt2有47000多条数据,现在想将dt1和dt2做比较,把新的数据都存入dt2的数据库,更新过的数据更新,已删除的数据删除。

因两个DataTable数据来源于不同数据库,数据库结构有不一样(更新、删除dt2数据库的数据需要id,但dt1数据库没有id,DataTable的id列数据为空)。

我写了个方法来判断,方法如下:

foreach (DataRow dr1 in dt1.Rows)
{
foreach (DataRow dr2 in dt2.Rows)
{
if (dr1["No"].ToString() == dr2["No"].ToString())//数据编号,不是id值
{
//判断其它列数据是否一样
if (相同)
dr1.Delete();
else
dr1["id"] = dr2["id"];//id用更新dt2数据库

dr2.Delete();
dr2.AcceptChanges();//这里有点问题
break;
}
}
}
dt1.AcceptChanges();



以上方法简略了一下,但实际运行没问题的。

奇怪的是,要是2个DataTable数据都来源于Access数据库,一个新的,一个旧的,对比耗时10秒就完成了,但要是两个数据库一个是Access,另外一个是MySql,对比耗时就需要3~5分钟(因项目需要,新的数据来源于Access数据库,而需要用的数据即旧数据存放在MySql)。

另外一个奇怪的是,dr2.AcceptChanges();这里,要是我直接利用OleDbDataAdapter da = new OleDbDataAdapter();da.Fill(dt2)这样生成dt2的时候,dr2删除后是要调用AcceptChanges()来确认删除的,不调用会报错,但要是我是通过其他方法获取数据,然后逐条dt2.Rows.Add(dr)插入,就不需调用AcceptChanges()来删除dr2了,调用还会报错:不存在改行,不是dr2.Delete()只是标记删除吗?会什么就直接删除了?两种创建DataTable方法有什么不同??

麻烦大家帮帮忙,主要是两个DataTable数据过滤耗时问题,请问如果可以做得快速点?耗时10秒跟耗时3~5分钟为什么相差这么大?
...全文
122 7 打赏 收藏 转发到动态 举报
写回复
用AI写文章
7 条回复
切换为时间正序
请发表友善的回复…
发表回复
jason87629 2012-09-03
  • 打赏
  • 举报
回复
已解决,谢谢大家的回答
  • 打赏
  • 举报
回复
我在想,你每个对比的过程,还不如用同步的概念比较好一点,总有一个数据库的记录是最新的,那么直接将最新的所有记录同步到要更新的数据库中去,而不去对比,利用Bcp导入应该是很快的
--茶-- 2012-09-03
  • 打赏
  • 举报
回复
这两个表必须有相同的东西才可以,必须具有可比性,比如那些共同的字段,这些共同字段名称可能不同,但是含义是一样的。
剩下的问题就简单了。
其实你可以在dt1中增加个标记字段,T或F,比较过程中做标记,做过标记的直接删除即可
jason87629 2012-09-03
  • 打赏
  • 举报
回复
[Quote=引用 3 楼 的回复:]
更新、删除dt2数据库的数据需要id,但dt1数据库没有id,DataTable的id列数据为空
你不是说两个DataTable数据结构相同么?
[/Quote]

结构是相同的,但数据不一样啊。。

就是两个DataTable的列是一样的,dt1的id为空,dt2的id有数据,然后其它列是其他数据
garfieldzf 2012-09-03
  • 打赏
  • 举报
回复
更新、删除dt2数据库的数据需要id,但dt1数据库没有id,DataTable的id列数据为空
你不是说两个DataTable数据结构相同么?
jason87629 2012-09-03
  • 打赏
  • 举报
回复
我尝试了很多方法都没解决,麻烦大家帮帮忙吧!!!!
jason87629 2012-09-03
  • 打赏
  • 举报
回复
谁可以帮帮忙?

110,566

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 C#
社区管理员
  • C#
  • Web++
  • by_封爱
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

让您成为最强悍的C#开发者

试试用AI创作助手写篇文章吧