Dies ist eine Vereinfachung des Problems (es gibt viele Möglichkeiten, Dinge zu tun), aber bei Anwendungen, die mit einer Datenbank kommunizieren müssen, habe ich normalerweise eines von zwei Mustern gesehen:
- Objekt-Relationales Mapping (ORM), bei dem (in der Regel) jede Tabelle in der Datenbank eine entsprechende "Row-Wrapper"-Klasse mit öffentlichen Eigenschaften hat, die den Spalten der Tabelle entsprechen. Manchmal rufen diese Klassen auch automatisch verwandte Informationen ab, so dass Fremdschlüsselspalten stattdessen als verwandte Daten (und nicht nur als PK-Werte) angezeigt werden können.
- DataTables (und/oder DataSets), bei denen die Daten als DataTable vom Server abgerufen und in dieser Form bearbeitet werden (auch in der Benutzeroberfläche).
Einer der Hauptunterschiede zwischen den beiden Ansätzen ist, dass ORM es Ihnen ermöglicht, in Ihrem Code auf stark typisierte Felder zu verweisen:
Person bob = new Person();
bob.FirstName = "Bob";
collectionPeople.Add(bob);
Mit dem DataTable-Ansatz hingegen würde Ihr Code etwa so aussehen:
DataRow newrow = datatablePeople.NewRow();
newrow["FirstName"] = "Bob";
datatablePeople.Rows.Add(newrow);
In diesem Fall profitiert der ORM-Ansatz von der Kompilierzeitüberprüfung, während der DataTable-Ansatz dies nicht tut. Andererseits handelt es sich bei DataTable (und DataSet) um bereits geschriebene Datenstrukturen, die relationale Daten sehr gut direkt darstellen können. Darüber hinaus kann Code, der DataTables verwendet, von anderen leicht verstanden und geändert werden. Eigene ORM-Systeme (und oft auch COTS-Systeme) führen oft zusätzliche Datenbankzugriffe "unter der Haube" durch, um Fremdschlüssel usw. aufzufüllen, was für Unwissende zu Problemen führen kann.
Welchen Ansatz bevorzugen Sie also im Allgemeinen und warum?