我在寫程序&我想擁有2個SQL Server數據庫。一個在客戶端,另一個在服務器上。我想檢查我的程序中的互聯網連接,如果用戶連接到互聯網,則使用服務器數據庫,如果它處於脫機狀態,則使用客戶端數據庫,然後當用戶連接到互聯網時,服務器數據庫會使用客戶端數據庫。如何使用C#中具有相同表的兩個數據庫?
由於兩個數據庫是完全一樣的,並有相同的表我怎麼能做到這一點?我的意思是連接字符串和dbml文件的內容。
我在寫程序&我想擁有2個SQL Server數據庫。一個在客戶端,另一個在服務器上。我想檢查我的程序中的互聯網連接,如果用戶連接到互聯網,則使用服務器數據庫,如果它處於脫機狀態,則使用客戶端數據庫,然後當用戶連接到互聯網時,服務器數據庫會使用客戶端數據庫。如何使用C#中具有相同表的兩個數據庫?
由於兩個數據庫是完全一樣的,並有相同的表我怎麼能做到這一點?我的意思是連接字符串和dbml文件的內容。
既然你已經提到了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))
{
...
}
你應該看一看進入Microsoft Sync Framework。它本身說:
一個功能完善的同步平臺,使應用程序,服務和與任何數據類型,所有的數據存儲,任何轉讓協議 支持設備協作 和離線訪問,並 任何網絡拓撲。
它準備好了準確地覆蓋您的方案。
是的我正在使用LINQ2SQL!所以你的意思是我應該爲每個功能做?!我可以確定哪個連接字符串正在被使用,然後只使用一個數據上下文? –
@PayamSh我已經更新了我的意思。 – StuartLC
我真的很感謝,但我應該如何添加表到我的dbml文件? Cuz我無法將兩個數據庫的表拖放到一個dbml文件中,因爲這些表具有相同的名稱。 –