2012-04-02 13 views
2

Ich bin neu in C# zu Codierung, sind die meisten meiner Erfahrung in plain old C.Lese von mehreren ähnlichen unbekannten Datenbanken

Ich versuche, eine Anwendung in C# zu codieren, die Informationen von einem der vielen Access-nachschlägt Datenbanken. Jede Datenbank ist insofern ähnlich, als sie dieselben Tabellen (die für die Datenbank selbst geeignet sind) (PIC, PICenum usw.) haben. Die gleiche Tabelle in jeder Datenbank enthält dieselben Feldnamen (LnetVar, Description usw.). Jede Datenbank bezieht sich auf einen anderen Datensatz, der sich von den anderen Datenbanken unterscheidet. Aus diesem Grund habe ich mehrere Datenbanken statt einer umfassenden Datenbank. Es macht es auch viel einfacher.

Ich habe derzeit Code, der auf eine bestimmte Datenbank zugreifen und die Daten abrufen kann, die ich an anderer Stelle im Code benötige.

class DB_Handler 
{ 
    lsftTestDataSet.PICDataTable ds; 

    public DB_Handler(lsftTestDataSet.PICDataTable ds) 
    { 
     this.ds = ds; 
    } 

    public string GetDescription(byte lnetVar) 
    { 
     foreach (lsftTestDataSet.PICRow currentRow in ds) 
     { 
      if (currentRow.LnetVar == lnetVar) 
      { 
       return currentRow.Description; 
      } 
     } 

     return ""; 
    } 
} 

Ich möchte nicht den alten Copy-Paste-Modify-Trick machen, so dass er mit jeder Datenbank interagieren kann. Ich möchte vielmehr eine einzelne Funktion aufrufen, die die zu verwendende Datenbank sowie die relevanten Datensatz- und Feldinformationen sendet. Von diesem durchsucht es die Datenbank und gibt die gespeicherten Daten zurück.

Ich fand eine ähnliche Frage here, aber es war auf die Optimierung konzentriert, nicht auf es tatsächlich zu tun. Ich war auch nicht in der Lage, dem Code-Snippet zu folgen, das gegeben wurde, um es zu ändern, um mit meinem Code zu verwenden.

Jede Hilfe, die Sie mir geben können, würde sehr geschätzt werden!

+0

'Copy-Paste-Modify kludge' ftfy – mellamokb

+0

Dataset Pass auf den Konstruktor wahrscheinlich nicht eine richtige Sache in einer Klasse zu tun, die für DB-Zugriff verantwortlich ist. Eine Funktion in dieser Klasse sollte nur den Wert des Primärschlüssels als Parameter übernehmen und ein datensatzbasiertes Ergebnis zurückgeben, das von der Datenbank zurückgegeben wird. –

Antwort

0

Wie Sie sagten, benötigen Sie eine Methode/Funktion, die einen Parameter erhält, der die Verbindungszeichenfolge enthält, die Sie verwenden möchten.

0

Ich würde so etwas tun: -

In Web.config oder App.Config

<connectionStrings> 
<add name="DbConnnectionString" connectionString="server=myserver;database={MyDatabasePlaceHolder};Integrated Security=SSPI;" 
</connectionStrings> 

und dann in Code (auch, müssen einen Verweis von System.Configuration.dll hinzufügen)

using System.Configuration; 
class DB_Handler 
{ 
     string connectionString=string.Empty; 
     public DB_Handler(string databaseName) 
     { 
      this.connectionString = ConfigurationManager.ConnectionStrings["DbConnnectionString"].ConnectionString.Replace ("{MyDatabasePlaceHolder}", databaseName) 
     } 

     public GetData() 
     { 
      // Make use of this.connectionString to fetch data 
     } 
} 
+0

Ich habe die meisten der von Ihnen empfohlenen Änderungen vorgenommen, ConfigurationManager wird jedoch nicht als gültiger Eintrag erkannt. Habe ich einen wichtigen Schritt auf dem Weg verpasst? – CraigC

+0

Haben Sie den Verweis von System.Configuration.dll zu Ihrem Projekt hinzugefügt? Sie können mit der rechten Maustaste auf das Projekt klicken> Verweis hinzufügen> Registerkarte .NET> Wählen Sie System.Configuration.dll. –

+0

Sorry wegen der Verzögerung, ich hatte die Referenz nicht hinzugefügt. Es taucht jetzt auf. Vielen Dank! – CraigC

Verwandte Themen