Entwickler-Ecke

Datenbanken (inkl. ADO.NET) - Datenbankstring global deklarieren


Romy - Di 03.02.09 15:06
Titel: Datenbankstring global deklarieren
Hallo an alle!

Wie deklariere ich am besten den String zu einer Datenbank, also so, dass ich nicht jedes Mal den kompletten Pfad angeben muss (für Excel und Access)?

Ist eine einfache Methode sinnvoll oder gibt es eine andere Möglichkeit, den Sting zB global zu deklarieren und im Programm aufzurufen?

Die Deklarierung sieht derzeit so bei mir aus:
Excel:

C#-Quelltext
1:
2:
3:
strQuelle = @"D:\SCHULE HAK\Maturaprojekt\CH_Chemialiendatenbank1.0\CH_Chemialiendatenbank1.0\bin\Debug\Chemikalien.xls";
            string connString = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source="
            + strQuelle + ";Extended Properties=Excel 8.0;";


Access:

C#-Quelltext
1:
2:
strQuelle = "D:\\SCHULE HAK\\Maturaprojekt\\CH_Chemialiendatenbank1.0\\CH_Chemialiendatenbank1.0\\bin\\Debug\\Benutzer.mdb";
            cn = "Provider=Microsoft.Jet.OLEDB.4.0;User ID=Admin;Password=;data source=" + strQuelle;


Wer hat eine Idee, wie ich mein Problem am besten lösen kann?
Ich bin für jede Hilfe sehr dankbar!
Lg Romy


jaenicke - Di 03.02.09 15:17

Wegen dem Pfad: Kennst du Application.StartupPath [http://msdn.microsoft.com/en-us/library/system.windows.forms.application.startuppath.aspx]? Das ist der aktuelle Pfad deiner Exe. ;-)

Und den konstanten Rest des Strings könntest du z.B. in einer Ressource speichern:
http://msdn.microsoft.com/de-de/library/system.resources.resourcereader.aspx

In der Anwendung selbst wäre eine entsprechende Methode vermutlich die beste Lösung, globale Variablen in dem Sinn gibt es in C# nicht.


Kha - Di 03.02.09 18:16

user profile iconjaenicke hat folgendes geschrieben Zum zitierten Posting springen:
In der Anwendung selbst wäre eine entsprechende Methode vermutlich die beste Lösung, globale Variablen in dem Sinn gibt es in C# nicht.
Wenn man den Ressourceneintrag in VS erstellt (standardmäßig gibts dafür Resources.resx), wird automatisch eine Klasse mit entsprechender Property erstellt :) .
Wenn der Pfad aber auf jeden Fall konstant bleibt, tut es auch ein public static readonly string, am Besten natürlich in einer Klasse, die etwas mit der DB-Anbindung zu tun hat (wofür dann hoffentlich auch privategenügt).

/edit: C# != Java...


rzwanziger - Di 17.03.09 12:21

Globale Variablen gibt es zwar nicht in C#, es gibt aber dennoch eine Lösung, in einer Windows-Forms-Anwendung aus allen Klassen heraus auf gemeinsame Variablen zuzugreifen.
Ich lege mir zu diesem Zweck immer eine statische Klasse "Global" an - Beispiel:


C#-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
  public static class Global
  {
    public static string DBPATH = @"\Storage Card\mobile.db"//Pfad zur Datenbank
    public static string DBERROR = "";
    public static System.Drawing.Color COLOR_DISABLED = System.Drawing.Color.Orange;
    public static System.Data.SQLite.SQLiteConnection DBCONN = null;
    ....
  }


So kann ich, über Angabe des Präfix "Global." aus allen Modulen heraus auf meine globale Klasse zugreifen. DAs Ganze macht natürlich auch nur da Sinn, wo Variablen und Methoden wirklich auch global gebraucht werden.