Announcement

Collapse
No announcement yet.

Best Practice: DataSet TableAdapter Views usw

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

  • Best Practice: DataSet TableAdapter Views usw

    Hi,

    ich bin gerade dabei eine erste Test-Applikation mit Visual Basic .NET in Visual Studio Express 2010 zu erstellen. Als Datenbank kommt dabei Jet (Access 2003) zum Einsatz.

    Bisher habe ich weder ein ansprechendes Buch noch gute Web Sites - außer dieser hier - für professionelle Anwendungsentwicklung gefunden ... Vorschläge?

    Von dem was ich bezgüglich der Anbindung einer Datenbank bisher gelesen und meine verstanden zu haben, repräsentiert das DataSet meine Datenstrukturen, dh ich kann hier meine Abfragen, Queries usw zur Verfügung stellen, damit nachgelagerte Objekte leichter auf die Datenstrukturen zugreifen können.

    Wenn ich es mit mehreren Datenbanken und weiteren Arten von Datenquellen zu tun habe: Sollte ich dann alle in einem DataSet hinterlegen oder sollte ich jeweils ein DataSet für Datenbanken, eins für Web Services usw anlegen oder lieber für jede Datenquelle?

    Ein TableAdapter lädt die Daten aus der Datenquelle und stellt sie dem DataSet zur Verfügung. Gleichzeitig sorgt er auch umgekehrt für die Speicherung von Änderungen. Der TableAdapter kann dabei sowohl einfache Tabellen als auch über SQL Daten einer Abfrage zurückliefern.

    In einer normalisierten Datenbank gibt es ja eher selten den Fall, daß Daten einer Tabelle direkt geladen und geändert werden sollen. Der Normalfall sind aus Gründen der Lesbarkeit und auch zur Restriktion ungewollter Zugriffe ja eher Abfragen, die aus den entsprechenden Tabellen die lesbaren Werte joinen und als Abfrageergebnis liefern.

    Hier hat sich mir die Hauptfrage aufgedrängt: Nehmen wir an, ich hätte zwei Tabellen, deren Join genau die Daten enthält, die ich in einem DataGridView anzeigen und bearbeiten lassen möchte; dann gibt es offenbar mehrere Optionen:
    • TableAdapter für eine Query aus der Datenbank - sind die generierten INSERT / UPDATE / DELETE Statements wirklich in der Lage beide Basistabellen entsprechend zu pflegen?
    • TableAdapter mit SELECT-Statement - gleiche Frage wie zuvor; der einzige Unterschied wäre hier, daß neue Abfragen direkt im DataSet erstellt werden könnten, wobei ich mir noch nicht sicher bin, ob das ein Vor- oder Nachteil wäre.
    • Zwei TableAdapter und ein Abfrage-Objekt - das imitierte die Datenbank im DataSet; auch hier stellt sich die Frage, ob es vorteilhafter ist als eine Abfrage in der Datenbank zu erstellen.
    • ADO.NET/DataAdapter mit SQL-Statements direkt im Code - damit beraubte ich mich sicherlich einiger Automatisierungs- und Pflegevorteile im Gegensatz zur Realisierung mit den dafür vorgesehenen Objekten

    Lange Rede, kurzer Sinn: Wo und wie soll ich meine Abfragen realisieren?


    Ein TableAdapter bietet die Option neben Fill() und GetData() auch noch weitere eigene Methoden zu definieren, die andere SQL-Statements (auch mit Parameter) enthalten können.

    Wenn ich in einem DataGridView eine Untermenge von Daten anzeigen lasse, könnte ich dies sowohl über eine TableAdapter-Funktion als auch einen Filter realisieren. Wann nehme ich was?

    Die DataBindingSource ist der "Vermittler" zwischen dem Control und dem TableAdapter und befriedigt die Datenbedürfnisse des Controls entsprechend.

    Ich mag die Optik des DataGridViews nicht besonders. Gibt es auch die Möglichkeit zB einen ListView zu einem DataListView zu "extenden"?


    Das wären erstmal meine grundlegenden Fragen - ich freue mich schon sehr auf die erleuchtenden Antworten und die Erfahrungswerte aus der Praxis ...
    --
    Cheers Vince

  • #2
    Hallo,

    Als Datenbank kommt dabei Jet (Access 2003) zum Einsatz.
    Nimm lieber eine richtige Datenbank wie den SQL Server. Den gibt es auch in der freien Express-Version. Access bereitet mehr Probleme als es nützt, zumal der SQL Server in VS auch unterstützt wird.
    Wenn du dich für die Express-Version entscheidest, achte beim Download darauf, dass die Advanced Services vorhanden sind. Das wäre dieser Link: Download: Microsoft SQL Server 2008 R2 RTM – Express with Advanced Services

    Lange Rede, kurzer Sinn: Wo und wie soll ich meine Abfragen realisieren?
    Einfacher und "zeitgemäßer" kannst du den Datenzugriff mit einem O/R-Mapper wie dem ADO.net Entity Framework erledigen. Dazu wirst du genügend Beispiele und Tutorials finden - es ist nicht so kompliziert wie es zu Beginn den Schein macht, sondern eher viel direkter, da die Impedanzanpassung von Datenbank zu OOP der Mapper erledigt.

    Ich mag die Optik des DataGridViews nicht besonders. Gibt es auch die Möglichkeit zB einen ListView zu einem DataListView zu "extenden"?
    Bei Winforms lässt sich das schon bewerkstelligen. Ich würde aber gleich auf WPF setzen, da hast du volle Freiheit über die Gestaltung.


    mfG Gü
    "Any fool can write code that a computer can understand. Good programmers write code that humans can understand". - Martin Fowler

    Comment


    • #3
      Moin,

      Originally posted by gfoidl View Post
      Nimm lieber eine richtige Datenbank wie den SQL Server. Den gibt es auch in der freien Express-Version. Access bereitet mehr Probleme als es nützt, zumal der SQL Server in VS auch unterstützt wird.
      Wenn du dich für die Express-Version entscheidest, achte beim Download darauf, dass die Advanced Services vorhanden sind. Das wäre dieser Link: Download: Microsoft SQL Server 2008 R2 RTM – Express with Advanced Services
      Leider muß es aus verschiedenen Gründen Jet sein - aber danke für den Hinweis, den habe ich schon oft gehört.

      Originally posted by gfoidl View Post
      Einfacher und "zeitgemäßer" kannst du den Datenzugriff mit einem O/R-Mapper wie dem ADO.net Entity Framework erledigen. Dazu wirst du genügend Beispiele und Tutorials finden - es ist nicht so kompliziert wie es zu Beginn den Schein macht, sondern eher viel direkter, da die Impedanzanpassung von Datenbank zu OOP der Mapper erledigt.
      Ja, hatte ich auch schon überlegt, wollte das aber eigentlich auf den "nächsten Schritt" vertagen und erstmal eine "simple Anwendung" machen. Aber ich werde das gleich mal recherchieren - hoffentlich wird da dann auch die Frage beantwortet, wo Abfragen zu realisieren sind ...

      Originally posted by gfoidl View Post
      Bei Winforms lässt sich das schon bewerkstelligen. Ich würde aber gleich auf WPF setzen, da hast du volle Freiheit über die Gestaltung.
      Autsch ... und auch das hatte ich eigentlich für "später" eingeplant ... aber erstmal vielen Dank für die guten Tips!
      --
      Cheers Vince

      Comment


      • #4
        Hallo,

        hoffentlich wird da dann auch die Frage beantwortet, wo Abfragen zu realisieren sind
        idealerweise in einem Repository. Siehe Using Repository and Unit of Work patterns with Entity Framework


        Die Denkweise bei der Entwicklung von WinForms und WPF ist ein wenig verschieden. So gesehen erschwerst du es dir, wenn du zuerst WinForms macht und dann umsteigst. Mir fiel/fällt WPF leichter als WinForms, da ich es intuitiver finde. Wenn du dich auf WPF einlässt, ist zwar die Lernkurve ein wenig höher, v.a. wenn es richtig gemacht wird, denn einfach mit ein paar Mausklicks und im Designer was hin- und her ziehen ist nicht so drin. Schau dir aber in diesem Fall Das Model-View-ViewModel (MVVM) Entwurfsmuster für WPF an.
        Solltest du trotzdem mit WinForms beginnen wollen, so ist das auch nicht schlecht, aber machs auch dort richtig. Siehe z.B. Design Codes: MVVM for .NET Winforms – MVP-VM (Model View Presenter - View Model) Introduction

        mfG Gü
        "Any fool can write code that a computer can understand. Good programmers write code that humans can understand". - Martin Fowler

        Comment


        • #5
          Hi,

          vielen Dank für die Links - jetzt habe ich endlich was zu lesen und zu testen!
          --
          Cheers Vince

          Comment

          Working...
          X