Announcement

Collapse
No announcement yet.

Datenbankzugriff kapseln

Collapse
X
  • Filter
  • Time
  • Show
Clear All
new posts

  • Datenbankzugriff kapseln

    Hallo

    Angenommen ich habe ein Hauptfenster. In diesem kann ich immer eines von mehreren Unterfenstern aufrufen. Jedes Unterfenster besitzt ein DataGrid, welches eine bestimmte Tabelle anzeigt (auch zusammengestellte mit JOIN).
    Jedes DataGrid hat seine eigene zusammengestellte Tabelle.

    Jetzt meine Frage: Womit eignet es sich, die Datenbankaufrufe durchzuführen, um diese von der Formularklasse zu kapseln ?

    Mir fallen nur zwei Möglichkeiten ein:
    (1) Eine statische Klasse, dann kennt jede Formularklasse die Aufrufe. Allerdings muss man dafür für jedes Formular eine eigene Methode schreiben, die die entsprechenden SQL-Commands und Parameter besitzt. D.h. 10 Tabellen --> 10 unterschiedliche Aufrufe der SQL-Commands und Erstellung der Parameter. Finde ich aber irgendwie schlecht.
    (2) Eine normale Klasse, wobei jedes Unterformular ein eigenes Objekt erzeugt. Ob das allerdings so gut ist ?

    Falls jemand einen Vorschlag diesbezüglich hat, wäre ich sehr dankbar...

  • #2
    Hallo Jack,

    kannst Du mit partial class (NET 2.0) arbeiten? Dann schlage ich vor:
    • Alle DataTables werden in einem DataSet zusammengefasst.
    • Den "öffentlichen" Teil der Klasse benutzt Du für Deine eigenen Anpassungen.
    • Das DataSet wird als singleton-Klasse erzeugt.
    • Damit brauchst Du nur eine DbConnection.
    • Die SelectCommands kannst Du dann nach Bedarf vereinheitlichen.

    Gruß Jürgen

    Comment


    • #3
      Beispiel

      Kannst Du dafür mal ein Beispiel zeigen wie man ein Dataset zu einem Singelton macht.

      Danke

      Comment


      • #4
        Originally posted by Jörg Primke View Post
        Kannst Du dafür mal ein Beispiel zeigen wie man ein Dataset zu einem Singelton macht.
        1. Der Konstruktor wird als private deklariert.
        2. Folgender Code wird eingefügt:
        Code:
        private static MyDataSet instance = null;
        public static MyDataSet Instance {
            get { 
                if (instance == null)  {
                    instance = new MyDataSet();
                    //  ggf. zusätzliche Initialisierungen anfügen:
                    Init();
                }
                return instance;
            }
        }
        3. Alle Aufrufe erfolgen zum Beispiel durch:
        Code:
        DataRow row = MyDataSet.Instance.Tables["Table1"].Rows[0];
        In der designer.cs werden (natürlich) keine Änderungen vorgenommen.

        Viel Erfolg! Jürgen
        Zuletzt editiert von Jürgen Thomas; 24.06.2007, 16:36. Reason: static und Typ vergessen

        Comment


        • #5
          Wobei an dieser Stelle anzumerken sei, dass der angegebene Singleton nicht threadsicher ist und es somit beim initialen Zugriff auf den Singleton durch unterschiedliche Threads zu Problemen kommen kann. Hierfür würde ich empfehlen zumindest ein lock zu verwenden. Zwar nicht die beste Möglichkeit, aber schon wesentlich besser.

          Code:
          public class MyDemoClass 
          {
              private static MyDemoClass _instance = null;
              private static object _lockObject = new object();
          
              private MyDemoClass() { }
          
              public static MyDemoClass Instance
              {
                  get
                  {
                      lock (_lockObject)
                      {
                          if (_instance == null)
                          {
                              _instance = new MyDemoClass();
                          }
          
                          return _instance;
                      }
                  }
              }
          }
          .NET GUI - DIE Community für GUI-Entwickler

          Living.NET - Blog :: Live Blog :: .NET Casts

          Hol' dir jetzt dein kostenloses .NET BlogBook.

          Comment

          Working...
          X