两个不同数据库中的数据分别取到两个datatable如何合并成一个数据(datatable)中?
问题原型是这样的,有两个系统里的数据(两个oracle数据库,不同服务器),需要整合成一个数据供第3套系统来获取.这就要求我需要将两个数据库里的数据进行整合.如果是在同一个数据库中,或者两个数据库在同一个服务器里,我完全可以通过SQL语句来实现.
但是问题是这两个数据源数据库是分别放在不同服务器中的,我没法通过SQL语句来直接获取合并的数据信息,所以只能先通过程序分别获取两个数据库中的数据到datatable中,然后再合并两个datatable.来得到最终需要我处理的数据,然后的然后我再将合并后的数据写入第3套系统的数据库中.(好麻烦…但是思维已经固化.)于是搜索如何合并两个datatable.最终找到如下方法合并两个datatable:
///
/// 将两个列不同的DataTable合并成一个新的DataTable
///
/// 表1
/// 表2
/// 合并后新的表名
///
private DataTable UniteDataTable(DataTable dt1, DataTable dt2, string DTName)
{
DataTable dt3 = dt1.Clone(); //声明一个空的datatable 复制dt1的结构
for (int i = 0; i < dt2.Columns.Count; i++)
{
dt3.Columns.Add(dt2.Columns[i].ColumnName);
}
object[] obj = new object[dt3.Columns.Count];
for (int i = 0; i < dt1.Rows.Count; i++)
{
dt1.Rows[i].ItemArray.CopyTo(obj, 0);
dt3.Rows.Add(obj);
}
if (dt1.Rows.Count >= dt2.Rows.Count)
{
for (int i = 0; i < dt2.Rows.Count; i++)
{
for (int j = 0; j < dt2.Columns.Count; j++)
{
dt3.Rows[i][j + dt1.Columns.Count] = dt2.Rows[i][j].ToString();
}
}
}
else
{
DataRow dr3;
for (int i = 0; i < dt2.Rows.Count - dt1.Rows.Count; i++)
{
dr3 = dt3.NewRow();
dt3.Rows.Add(dr3);
}
for (int i = 0; i < dt2.Rows.Count; i++)
{
for (int j = 0; j < dt2.Columns.Count; j++)
{
dt3.Rows[i][j + dt1.Columns.Count] = dt2.Rows[i][j].ToString();
}
}
}
dt3.TableName = DTName; //设置DT的名字
return dt3;
}
原贴链接已经找不到了.如有侵权还请联系我删除.
但是当你自己想不透一个问题时千万不要吝啬你的请教.
一定要! ! !
一定要! ! !
一定要! ! !
一定要找身边同事讨论一下你这个问题,"当局者迷,旁观者清"这句话永远都是适用的.
跟同事说了一下自己的苦恼之后,被同事提醒了一句:何必要这么麻烦,完全可以先将两个数据库的数据分别写入第3套程序的数据库中,然后再SQL取一下放到我们需要抓取的表中啊.
一语惊醒梦中人~~~
对啊.第3套程序的数据库我是可以创建新表的.我完全可以将两个源数据分别放入数据库3的不同表中,然后直接操作数据库将数据写入第3套程序要抓取的数据表中啊.多么简单的道理.多么简单的做法???
有的时候换个思路,确实要省很多事,省去很多脑筋.
写程序嘛~
何必思维固化,我们的程序更多的时候要的是结果,而非过程
只要能实现功能要求,那么就是好程序
反思:此次项目中,自己耗费工时的最大问题点就是,思维固化了.将所有的功能都集中于用代码来解决问题.但却忽略了通过调用数据库本身的功能来最大效率,做最少的工作去解决同样的数据处理问题.
遇到事情,自己的思考肯定是少不了的.但是当发现问题复杂了之后,一定要记得跟同事请教,三个臭皮匠赛过诸葛亮,集思广益,事情做起来往往更快捷,更省事
望看到帖子的朋友--------共勉