2011-12-30 64 views
3

我正在使用ADO.NET連接到數據庫的C#中的項目。查詢並不複雜,但由於項目的性質,我們有兩個具有相同結構的數據庫。其中一個固定的信息可能會每年從外部來源更新一次。另一個保持相同的結構,但用於自定義用戶條目。事情是,這意味着相同的查詢會被觸發到兩個數據庫。因爲我不想重複一堆代碼,所以我想知道是否有人知道將查詢組合到兩個相同結構的數據庫並自動合併結果的相對簡單的過程。將查詢合併到ADO.NET中的兩個數據庫中

+0

您需要更具體地瞭解*合併*查詢的含義。 – Jacob 2011-12-30 19:23:06

+0

這篇文章合併數據集可能有助於http://stackoverflow.com/questions/7441188/how-to-efficiently-merge-two-datasets – bryanmac 2011-12-30 19:23:45

+1

什麼是數據庫引擎? DB2?甲骨文? Sql Server?...另外,你的意思是不同服務器上不同實例上的兩個物理上獨立的數據庫?或者在同一臺服務器上有兩個命名數據庫對象 – 2011-12-30 19:32:06

回答

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

一種方法的數據是創建一個類來處理將查詢發送到兩個數據庫並將結果與​​您確定的任何規則進行合併的邏輯。下面是一個粗略的例子:

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