【问题标题】:Combining queries to two databases in ADO.NET在 ADO.NET 中将查询组合到两个数据库
【发布时间】:2011-12-30 19:21:42
【问题描述】:

我正在使用 C# 编写一个项目,该项目利用 ADO.NET 连接到数据库。查询并不是非常复杂,但由于项目的性质,我们有两个具有相同结构的数据库。一个是固定的信息,这些信息可能每年从外部来源更新一次。另一个保持相同的结构,但它用于自定义用户条目。问题是,这意味着相同的查询会被发送到两个数据库。由于我不想复制一堆代码,所以我想知道是否有人知道将查询组合到两个结构相同的数据库并自动组合结果的相对简单的过程。

【问题讨论】:

  • 您需要更具体地了解组合查询的含义。
  • 这篇关于合并数据集的帖子可能会有所帮助stackoverflow.com/questions/7441188/…
  • 什么是数据库引擎? DB2?甲骨文? Sql Server?...另外,您是指不同服务器上不同实例上的两个物理上独立的数据库吗?还是同一台服务器上的两个命名数据库对象?
  • 同一台服务器上的两个Access数据库。结构是相同的,但与其连接、查询和提取结果,不如将两者的过程组合成比两次做同样的事情更简单的事情。

标签: c# sql database ado.net


【解决方案1】:

DataAdapter.Fill(DataTable) 会将结果附加到您传递给它的表中。所以假设 cs1 和 cs2 是两个连接字符串:

DataTable dt = new DataTable();
string selectSql = "SELECT STUFF FROM SOMEWHERE";
foreach (String cs in new string[] { cs1, cs2 }) {
    using (OdbcDataAdapter adp = new OdbcDataAdapter(selectSql, cs)) {
        adp.Fill(dt);
    }
}

第一次调用初始化 DataTable 并用数据库 1 中的结果填充它,第二次调用附加数据库 2 中的数据。

【讨论】:

    【解决方案2】:

    一种方法是创建一个类来处理将查询发送到两个数据库并将结果与​​您确定的任何规则合并的逻辑。这是一个粗略的例子:

    public class OverlayDatabase
    {
        private string masterDbConnStr;
        private string userDbConnStr;
    
        public OverlayDatabase(string masterDbConnStr, string userDbConnStr)
        {
            // ...
        }
    
        public DataSet ExecuteQuery(DbCommand command)
        {
            var dataSets = new List<DataSet>();
            foreach (var connStr in new[] { masterDbConnStr, userDbConnStr } )
            {
                // 1. Create connection
                // 2. Execute command with that connection
                // 3. Store dataset in dataSets
            }
            return MergeDataSets(dataSets);
        }
    
        private DataSet MergeDataSets(IEnumerable<DataSet> datasets)
        {
            // Merge logic here
        }
    }
    

    【讨论】:

      猜你喜欢
      • 2014-10-23
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-05-10
      • 2018-11-18
      • 2014-01-16
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多