两个不同数据库中的数据分别取到两个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套程序要抓取的数据表中啊.多么简单的道理.多么简单的做法???

有的时候换个思路,确实要省很多事,省去很多脑筋.
写程序嘛~
何必思维固化,我们的程序更多的时候要的是结果,而非过程
只要能实现功能要求,那么就是好程序

反思:此次项目中,自己耗费工时的最大问题点就是,思维固化了.将所有的功能都集中于用代码来解决问题.但却忽略了通过调用数据库本身的功能来最大效率,做最少的工作去解决同样的数据处理问题.

遇到事情,自己的思考肯定是少不了的.但是当发现问题复杂了之后,一定要记得跟同事请教,三个臭皮匠赛过诸葛亮,集思广益,事情做起来往往更快捷,更省事
望看到帖子的朋友--------共勉

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
C# 三层架构,实现两个数据表的连接通常可以采用 SQL 语句的 JOIN 操作,或者使用 LINQ 进行数据集合的关联查询。以下是两种方法的示例代码: 1. 使用 SQL JOIN 操作实现数据表连接 ```csharp using System.Data; using System.Data.SqlClient; // 数据库连接字符串 string connectionString = "Server=数据库服务器地址;Database=数据库名称;User Id=用户名;Password=密码;"; // SQL查询语句,使用 LEFT JOIN 操作实现两个表的连接 string sql = "SELECT * FROM 表1 LEFT JOIN 表2 ON 表1.字段1 = 表2.字段2"; // 创建数据库连接对象 using (SqlConnection connection = new SqlConnection(connectionString)) { // 创建SqlDataAdapter对象 SqlDataAdapter adapter = new SqlDataAdapter(sql, connection); // 创建数据集对象 DataSet dataset = new DataSet(); // 使用SqlDataAdapter对象填充数据集 adapter.Fill(dataset, "表1"); // 获取数据DataTable table = dataset.Tables["表1"]; // 处理数据表 // ... } ``` 2. 使用 LINQ 进行数据集合的关联查询 ```csharp using System.Collections.Generic; using System.Linq; // 定义数据表实体类 public class Table1 { public int Id { get; set; } public string Name { get; set; } } public class Table2 { public int Id { get; set; } public int Table1Id { get; set; } public string Description { get; set; } } // 定义数据访问层接口和实现类 public interface IDataAccess { List<Table1> GetTable1List(); List<Table2> GetTable2List(); } public class DataAccess : IDataAccess { public List<Table1> GetTable1List() { // 获取 Table1 数据表的数据集合 // ... } public List<Table2> GetTable2List() { // 获取 Table2 数据表的数据集合 // ... } } // 在业务逻辑层使用 LINQ 进行数据集合的关联查询 public class BusinessLogic { private IDataAccess dataAccess; public BusinessLogic(IDataAccess dataAccess) { this.dataAccess = dataAccess; } public List<Table1> GetJoinedTableList() { // 获取 Table1 和 Table2 的数据集合 List<Table1> table1List = dataAccess.GetTable1List(); List<Table2> table2List = dataAccess.GetTable2List(); // 使用 LINQ 进行数据集合的关联查询 var joinedTableList = from t1 in table1List join t2 in table2List on t1.Id equals t2.Table1Id into temp from t2 in temp.DefaultIfEmpty() select new { Table1Id = t1.Id, Table1Name = t1.Name, Table2Description = t2 != null ? t2.Description : string.Empty }; // 转换为 Table1 对象的集合并返回 return joinedTableList.Select(j => new Table1() { Id = j.Table1Id, Name = j.Table1Name, Description = j.Table2Description }).ToList(); } } ``` 以上是两种实现两个数据表连接的示例代码,具体实现方法需要根据实际需求进行调整和修改。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值