2012-04-12 62 views
3

我即將開始一個非常大的項目,因此我正在收集有關在閱讀項目文檔和客戶端請求時預測的一些問題的信息。其中一個問題是這樣的:在一個應用程序中使用多個數據庫

我的客戶是一個有多個分部的公司,每個分部都使用自己的數據庫。現在,我的任務是制定一個管理應用程序,使所有這些細分都將使用(它們都執行相同的任務,因爲它們的地理位置和一些對我的問題不重要的法規) 。所以,我的問題是如何創建一個能夠在數據庫之間切換的應用程序。通常情況下,我可以通過創建一個包含輸入字段的WinForm(例如textBoxes或comboBoxes)來實現,用戶可以選擇使用哪個連接,但由於這些應用程序必須生成報告,因此我遇到了此方法的問題。直到現在,我一直在處理使用由TableAdapter創建的數據集的.rdlc報告。所以如果我創建一個數據集programmaticaly,我不知道如何生成一個報告。但是,如果我創建基於TableAdapters數據集的報表,我不知道如何更改TableAdapters連接字符串(除了複製TableAdapter,因此每個使用另一個連接字符串,但效率都不高)。我使用C#來創建WinForms和SQL來處理數據庫。請幫我解決這個問題。 感謝

回答

1

嘗試使用多個web服務的組合和下圖中像右手樹servicebus:

enter image description here

請注意,這是先進的C#,但很容易維護和低耦合!

+0

你能分享一些鏈接如何做到這一點,我從來沒有與他們合作 – NDraskovic 2012-04-12 08:23:30

+0

http://ayende.com/blog/3752/rhino-service-bus – 2012-04-12 08:25:25

2

爲此,我可以建議你去工廠設計模式創建對象,這將幫助您創建正確的數據庫對象,即使你在你的應用程序中添加任何沒有什麼不同數據庫的

//factory inerface 
public inteface DataBaseCommonFactory() 
{ 
    ///you all coomon methods are here 
    public bool createuser(); 
} 


//DAtabase specifc classes 

//sql server 
public class SqlServer : DataBaseCommonFactory 
{ 
    public bool createuser() 
    { 
     //implementation 
    } 
} 

//oracle server 
public class OracleServer : DataBaseCommonFactory 
{ 
    public bool createuser() 
    { 
     //implementation 
    } 
} 


//mysql server 
public class MySqlServer : DataBaseCommonFactory 
{ 
    public bool createuser() 
    { 
     //implementation 
    } 
} 


public class DataBaseCreationFactory 
{ 
    public DataBaseCreationFactory(string DatabaseType)//this might be enum 
    { 
     if(DatabaseType == "Sqlserver") 
     return new SqlSErver(); 
     if(DatabaseType == "Oracleserver") 
     return new OracleSErver(); //same for mysql or anyother datavase 
    } 
} 


public class Client 
{ 
    public void mymethod() 
    { 
     DataBaseCommonFactory sqlobject = new DataBaseCreationFactory("Sqlserver") 
     sqlobject.CreateUser(); 
     //if oracle is ther than parameter is orcalserver - or anyother database 
    } 
} 
+0

我讀過一些關於從app.config中拉取連接字符串,並將其應用於TableAdapter。這樣我可以在不同的數據庫上使用相同的TableAdapter(所有數據庫中的所有表都具有相同的模式,它們只是保存不同的數據)。那不是那麼容易嗎?如果是的話,我該怎麼做? – NDraskovic 2012-04-12 08:31:41

+0

@NDraskovic - 多數民衆贊成你可以去那,但我建議去與這種模式,這樣你就可以輕鬆地mainitan代碼....對於不同的數據庫有不同的提供商,你需要maange,你可以用這個做模式.. – 2012-04-12 09:46:18

相關問題