2012-08-28 76 views
2

我在寫程序&我想擁有2個SQL Server數據庫。一個在客戶端,另一個在服務器上。我想檢查我的程序中的互聯網連接,如果用戶連接到互聯網,則使用服務器數據庫,如果它處於脫機狀態,則使用客戶端數據庫,然後當用戶連接到互聯網時,服務器數據庫會使用客戶端數據庫。如何使用C#中具有相同表的兩個數據庫?

由於兩個數據庫是完全一樣的,並有相同的表我怎麼能做到這一點?我的意思是連接字符串和dbml文件的內容。

回答

3

既然你已經提到了dbml,我已經假定了LINQ2SQL。

我建議你添加2個連接字符串,一個用於客戶端,一個用於服務器。

然後使用DataContext()constructor它採用連接字符串名稱來確定上下文指向哪個數據庫。例如here

編輯

我會建議一個輔助方法/工廠是這樣的:

public static MyDataClassesContext GetDataContext(bool isInternetAvailable) 
{ 
    if (isInternetAvailable) 
    { 
    return new MyDataClassesContext("ServerConnStringName"); 
    } 
    else 
    { 
    return new MyDataClassesContext("LocalConnStringName"); 
    } 
} 

而在你使用代碼DataContexts:

// Whatever your mechanism is for determining internet availability 
    // (Note that you probably want to cache this bool lol) 
    bool isInternetAvailable = GetPingToServer() < 10000 ? true : false; 
    using (var dc = GetDataContext(isInternetAvailable)) 
    { 
     ... 
    } 
+0

是的我正在使用LINQ2SQL!所以你的意思是我應該爲每個功能做?!我可以確定哪個連接字符串正在被使用,然後只使用一個數據上下文? –

+0

@PayamSh我已經更新了我的意思。 – StuartLC

+0

我真的很感謝,但我應該如何添加表到我的dbml文件? Cuz我無法將兩個數據庫的表拖放到一個dbml文件中,因爲這些表具有相同的名稱。 –

0

你應該看一看進入Microsoft Sync Framework。它本身說:

一個功能完善的同步平臺,使應用程序,服務和與任何數據類型,所有的數據存儲,任何轉讓協議 支持設備協作 和離線訪問,並 任何網絡拓撲。

它準備好了準確地覆蓋您的方案。

相關問題