3. Die Fallstudie
Wir möchten eine .NET-Anwendung entwickeln, mit der ein Benutzer die Lohnabrechnung für Kinderbetreuer beim Verein „Maison de la petite enfance“ in einer Gemeinde simulieren kann. Wir werden uns ebenso sehr auf die Organisation des .NET-Codes der Anwendung konzentrieren wie auf den Code selbst.
3.1. Die Datenbank
Die zur Erstellung der Gehaltsabrechnung benötigten statischen Daten sind in einer SQL Server Express-Datenbank namens dbpam (pam = Paie Assistante Maternelle) gespeichert. Diese Datenbank hat einen Administrator namens sa mit dem Passwort msde.
![]() |
Die Datenbank enthält drei Tabellen: EMPLOYEES, CONTRIBUTIONS und ALLOWANCES mit folgender Struktur:
Table EMPLOYES : rassemble des informations sur les différentes assistantes maternelles
Struktur:
![]() |
|
Der Inhalt könnte wie folgt lauten:
![]()
Table COTISATIONS : rassemble les taux des cotisations sociales prélevées sur le salaire
Aufbau:
![]() |
Der Inhalt könnte wie folgt lauten:
Die Sozialversicherungsbeiträge sind unabhängig vom Arbeitnehmer. Die vorstehende Tabelle enthält nur eine Zeile.
Table INDEMNITES : rassemble les différentes indemnités dépendant de l'indice de l'employé
![]() |
|
Der Inhalt könnte wie folgt lauten:

Beachten Sie, dass die Zulagen von Kinderbetreuungsanbieter zu Kinderbetreuungsanbieter variieren können. Sie sind über die Gehaltsstufe des jeweiligen Anbieters an diesen gebunden. So erhält Frau Marie Jouveinal, die der Gehaltsstufe 2 (Tabelle „EMPLOYEES“) angehört, einen Stundenlohn von 2,1 Euro (Tabelle „INDEMNITES“).
Die Beziehungen zwischen den drei Tabellen sind wie folgt:
![]() |
Es besteht eine Fremdschlüsselbeziehung zwischen der Spalte EMPLOYEES(INDEX) und der Spalte ALLOWANCES(INDEX).
Die auf diese Weise erstellte Datenbank [dbpam] generiert zwei Dateien im Ordner „SQL Server Express“:
![]() |
Die Dateien [dbpam.mdf, dbpam_log.ldf] können auf einen anderen Rechner übertragen und dort wieder in das SQL Server Express-Datenbankmanagementsystem eingebunden werden. So geht’s:
- Die [dbpam]-Datenbankdateien werden in einen Ordner kopiert
![]() |
- Starten Sie SQL Server Express
- Fügen Sie mithilfe des SQL Server Management Studio Express-Clients die Datei [dbpam.mdf] zur Datenbank hinzu:
![]() |
![]() |
- Klicken Sie mit der rechten Maustaste auf [Datenbanken] / Anfügen
- Wählen Sie die Datei [dbpam.mdf] über die Schaltfläche [Hinzufügen] (nicht abgebildet) aus
- Die angehängte Datei erstellt eine Datenbank, die noch nicht vorhanden sein darf. Hier haben wir im Feld [Anhängen als] die neue Datenbank [dbpam2] benannt.
- Sie können die neue Datenbank und ihre Tabellen sehen
Diese Methode zum Anfügen einer Datenbank ist nützlich, um eine Datenbank von einem Computer auf einen anderen zu übertragen, und wir werden sie hier gelegentlich verwenden.
3.2. Berechnungsmethode für das Gehalt einer Tagesmutter
Wir stellen nun die Methode zur Berechnung des Monatsgehalts einer Tagesmutter vor. Als Beispiel nehmen wir das Gehalt von Frau Marie Jouveinal, die während des Abrechnungszeitraums 150 Stunden an 20 Tagen gearbeitet hat.
Folgende Faktoren werden berücksichtigt: | | |
Das Grundgehalt der Kinderbetreuungskraft wird anhand der folgenden Formel berechnet: | ||
Von diesem Grundgehalt müssen verschiedene Sozialversicherungsbeiträge abgezogen werden: | | |
Gesamtsumme der Sozialversicherungsbeiträge: | ||
Darüber hinaus hat die Kinderbetreuerin Anspruch auf eine Tagegeldzulage und eine Verpflegungszulage für jeden Arbeitstag. Somit erhält sie folgende Zulagen: | ||
Letztendlich ergibt sich folgender Nettolohn, der an die Tagesmutter zu zahlen ist: |
3.3. ADO.NET-Hinweise
Die Anwendung zur Lohn- und Gehaltsabrechnung benötigt Informationen aus der Datenbank [dbpam]. Ihre Architektur sieht wie folgt aus:
![]() |
- In [1] stellt der Benutzer eine Anfrage
- In [2] verarbeitet die Lohnabrechnungsanwendung diese Anfrage.
- Möglicherweise benötigt sie dann Daten aus der Datenbank. Daraufhin sendet sie eine Abfrage an den ADO.NET-Anbieter des verwendeten DBMS [4].
- Der Anbieter greift auf die Datenbank [5] zu und gibt die Ergebnisse an den ADO.NET-Anbieter zurück, der sie wiederum an die Anwendung weiterleitet
- Die Anwendung verarbeitet diese Ergebnisse und generiert eine Antwort [5] für den Benutzer
Wir werden nun die wichtigsten Schnittstellen betrachten, die ein ADO.NET-Anbieter seinen Clients zur Verfügung stellt [3].
Im verbundenen Modus führt die Anwendung folgende Schritte aus:
- eine Verbindung zur Datenquelle
- arbeitet mit der Datenquelle im Lese-/Schreibmodus
- schließt die Verbindung
An diesen Vorgängen sind in erster Linie drei ADO.NET-Schnittstellen beteiligt:
- IDbConnection, das die Eigenschaften und Methoden der Verbindung kapselt.
- IDbCommand, das die Eigenschaften und Methoden des ausgeführten SQL-Befehls kapselt.
- IDataReader, das die Eigenschaften und Methoden des Ergebnisses einer SQL-SELECT-Anweisung kapselt.
Die IDbConnection-Schnittstelle
dient zur Verwaltung der Verbindung zur Datenbank. Zu den Methoden (M) und Eigenschaften (P) dieser Schnittstelle gehören die folgenden:
Name | Typ | Rolle |
P | Datenbankverbindungszeichenfolge. Sie gibt alle Parameter an, die zum Herstellen einer Verbindung mit einer bestimmten Datenbank erforderlich sind. | |
M | Öffnet die Verbindung zu der durch ConnectionString definierten Datenbank | |
M | Schließt die Verbindung | |
M | Startet eine Transaktion. | |
P | Verbindungsstatus: ConnectionState.Closed, ConnectionState.Open, ConnectionState.Connecting, ConnectionState.Executing, ConnectionState.Fetching, ConnectionState.Broken |
Wenn „Connection“ eine Klasse ist, die die Schnittstelle „IDbConnection“ implementiert, kann die Verbindung wie folgt geöffnet werden:
Die IDbCommand-Schnittstelle
dient zur Ausführung einer SQL-Anweisung oder einer gespeicherten Prozedur. Zu den Methoden M und Eigenschaften P dieser Schnittstelle gehören die folgenden:
Name | Typ | Rolle |
P | gibt an, was ausgeführt werden soll – bezieht seine Werte aus einer Aufzählung: - CommandType.Text: Führt die in der CommandText-Eigenschaft definierte SQL-Anweisung aus. Dies ist der Standardwert. - CommandType.StoredProcedure: Führt eine gespeicherte Prozedur in der Datenbank aus | |
P | - der Text der auszuführenden SQL-Anweisung, wenn CommandType= CommandType.Text - der Name der auszuführenden gespeicherten Prozedur, wenn CommandType= CommandType.StoredProcedure | |
P | die IDbConnection-Verbindung, die zur Ausführung der SQL-Anweisung verwendet werden soll | |
P | die IDbTransaction-Transaktion, in der die SQL-Anweisung ausgeführt werden soll | |
P | Die Liste der Parameter für eine parametrisierte SQL-Anweisung. Die Anweisung `update articles set price=price*1.1 where id=@id` enthält den Parameter `@id`. | |
M | Zum Ausführen einer SELECT-SQL-Anweisung. Dies gibt ein IDataReader-Objekt zurück, das das Ergebnis der SELECT-Anweisung darstellt. | |
M | zum Ausführen einer SQL-Anweisung vom Typ „Update“, „Insert“ oder „Delete“. Die Anzahl der von der Operation betroffenen Zeilen (aktualisiert, eingefügt oder gelöscht) wird zurückgegeben. | |
M | zum Ausführen einer SQL-Select-Anweisung, die ein einzelnes Ergebnis zurückgibt, z. B.: select count(*) from articles. | |
M | zum Erstellen der IDbParameter-Parameter einer parametrisierten SQL-Anweisung. | |
M | ermöglicht es Ihnen, die Ausführung einer parametrisierten Abfrage zu optimieren, wenn diese mehrfach mit unterschiedlichen Parametern ausgeführt wird. |
Wenn „Command“ eine Klasse ist, die die Schnittstelle „IDbCommand“ implementiert, sieht die Ausführung einer SQL-Anweisung ohne Transaktion wie folgt aus:
Die IDataReader-Schnittstelle
Wird verwendet, um die Ergebnisse einer SQL-Select-Anweisung zu kapseln. Ein IDataReader-Objekt stellt eine Tabelle mit Zeilen und Spalten dar, die nacheinander verarbeitet werden: zuerst die erste Zeile, dann die zweite und so weiter. Zu den Methoden (M) und Eigenschaften (P) dieser Schnittstelle gehören die folgenden:
Name | Typ | Rolle |
P | Die Anzahl der Spalten in der IDataReader-Tabelle | |
M | GetName(i) gibt den Namen der Spalte i in der IDataReader-Tabelle zurück. | |
P | Item[i] steht für die Spaltennummer i der aktuellen Zeile in der IDataReader-Tabelle. | |
M | Wechselt zur nächsten Zeile in der IDataReader-Tabelle. Gibt True zurück, wenn die Zeile erfolgreich gelesen wurde, andernfalls False. | |
M | Schließt die IDataReader-Tabelle. | |
M | GetBoolean(i): Gibt den booleschen Wert der Spalte i in der aktuellen Zeile der IDataReader-Tabelle zurück. Weitere ähnliche Methoden sind: GetDateTime, GetDecimal, GetDouble, GetFloat, GetInt16, GetInt32, GetInt64, GetString. | |
M | Getvalue(i): Gibt den Wert der Spalte i in der aktuellen Zeile der IDataReader-Tabelle als Objekttyp zurück. | |
M | IsDBNull(i) gibt „True“ zurück, wenn Spalte i der aktuellen Zeile in der IDataReader-Tabelle keinen Wert enthält, was durch den SQL-NULL-Wert dargestellt wird. |
Die Verwendung eines IDataReader-Objekts sieht häufig wie folgt aus:









