2012-04-12 11 views
3

Ich bin dabei, ein ziemlich großes Projekt zu starten, also sammle ich Informationen über einige Probleme, die ich beim Lesen von Projektdokumentationen und Client-Anfragen vorausgesagt habe. Eines dieser Probleme ist das:Mehrere Datenbanken in einer Anwendung verwenden

Mein Client ist eine Firma, die mehrere Unterteilungen hat, und jede dieser Unterteilungen verwendet eine eigene Datenbank. Nun, ich habe die Aufgabe, eine Verwaltungsanwendung zu erstellen, die alle diese Unterteilungen verwenden werden (sie alle führen die gleichen Aufgaben aus, sie sind nur aufgrund ihrer geographischen Lage und einiger gesetzlicher Vorschriften, die für meine Frage nicht wichtig sind, geteilt) . Mein Problem besteht also darin, eine Anwendung zu erstellen, die zwischen Datenbanken wechseln kann. Normalerweise könnte ich dies tun, indem ich ein WinForm erzeuge, das Eingabefelder enthält (z. B. textBoxes oder comboBoxes), wo der Benutzer die zu verwendende Verbindung auswählen kann, aber ich habe ein Problem mit diesem Ansatz aufgrund von Berichten, die diese Anwendungen generieren müssen. Bis jetzt habe ich mit RDLC-Berichten gearbeitet, die von TableAdapters erstellte Datasets verwenden. Wenn ich also ein Programm programmatisch erstelle, weiß ich nicht, wie ich einen Bericht erzeuge. Aber wenn ich einen Bericht basierend auf einem TableAdapters-Dataset erstelle, weiß ich nicht, wie ich die TableAdapters-Verbindungszeichenfolge ändern kann (außer TableAdapters zu duplizieren, so dass jeder eine andere Verbindungszeichenfolge verwendet, die aber überhaupt nicht effizient ist). Ich verwende C#, um WinForms und SQL zu erstellen, um mit Datenbanken zu arbeiten. Bitte helfen Sie mir bei diesem Problem. Dank

Antwort

1

Versuchen Sie, eine Kombination aus mehreren Webdiensten und einen Servicebus wie die rechte Hand Baum im folgenden Bild mit:

enter image description here

Bitte beachten Sie, dass diese fortschrittliche C# ist aber sehr wartbar und seiner niedrigen gekoppelt!

+0

Können Sie teilen einige Links, wie man das macht, ich habe noch nie mit ihnen gearbeitet – NDraskovic

+0

http://ayende.com/blog/3752/rhino-servicebus –

2

Dazu kann ich Ihnen für Factory Design-Muster vorschlagen gehen für Objekterstellung wird dies auch Ihnen helfen, die richtige Datenbank-Objekt zu erstellen, wenn Sie eine andere Datenbank nicht von in Ihrer Anwendung hinzufügen

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

Ich habe etwas über das Ziehen der Verbindungszeichenfolge aus app.config gelesen, und das auf TableAdapters anwenden. Auf diese Weise könnte ich denselben TableAdapter für verschiedene Datenbanken verwenden (alle Tabellen in allen Datenbanken haben identische Schemas, sie enthalten nur unterschiedliche Daten). Wäre das nicht einfacher? Wenn ja, wie mache ich das? – NDraskovic

+0

@NDraskovic - das ist ok, Sie können dafür gehen, aber ich schlage vor, gehen Sie mit diesem Muster, so dass Sie in der Lage, leicht Code zu mainitan .... für die verschiedenen Datenbank gibt es verschiedene Anbieter, die Sie brauchen, um das zu tun Muster.. –

Verwandte Themen