将查询组合到ADO.NET中的两个数据库

时间:2011-12-30 19:21:42

标签: c# sql database ado.net

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

2 个答案:

答案 0 :(得分: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的数据。

答案 1 :(得分:1)

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

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
    }
}