3. Il caso di studio
Vogliamo scrivere un'applicazione .NET che consenta a un utente di effettuare simulazioni di calcolo delle retribuzioni delle assistenti materne dell'associazione «Maison de la petite enfance» di un comune. Ci concentreremo sia sull’organizzazione del codice DotNet dell’applicazione sia sul codice stesso.
3.1. l database
I dati statici necessari per la creazione della busta paga sono memorizzati in un database SQL Server Express denominato dbpam (pam = Paie Assistante Maternelle). Questo database ha un amministratore denominato sa con password msde.
![]() |
Il database contiene tre tabelle, EMPLOYES, COTISATIONS e INDEMNITES, la cui struttura è la seguente:
Table EMPLOYES : rassemble des informations sur les différentes assistantes maternelles
Struttura:
![]() |
|
Il contenuto potrebbe essere il seguente:
![]()
Table COTISATIONS : rassemble les taux des cotisations sociales prélevées sur le salaire
Struttura:
![]() |
Il suo contenuto potrebbe essere il seguente:
Le aliquote dei contributi sociali sono indipendenti dal dipendente. La tabella precedente contiene una sola riga.
Table INDEMNITES : rassemble les différentes indemnités dépendant de l'indice de l'employé
![]() |
|
Il contenuto potrebbe essere il seguente:

Si noti che le indennità possono variare da un'assistente all'infanzia all'altra. Esse sono infatti associate a una specifica assistente all'infanzia tramite il suo indice di retribuzione. Pertanto, la signora Marie Jouveinal, che ha un indice di retribuzione pari a 2 (tabella EMPLOYES), ha una retribuzione oraria di 2,1 euro (tabella INDEMNITES).
Le relazioni tra le tre tabelle sono le seguenti:
![]() |
Esiste una relazione di chiave esterna tra la colonna EMPLOYES (INDICE) e la colonna INDEMNITES (INDICE).
Il database [dbpam] così creato genera due file nella cartella di SQL Server Express:
![]() |
I file [dbpam.mdf, dbpam_log.ldf] possono essere trasferiti su un altro computer e ricollegati al SGBD SQL Server Express di quel computer. Ecco come procedere:
- i file BD e [dbpam] vengono duplicati in una cartella
![]() |
- si avvia SQL Server Express
- con il client SQL Server Management Studio Express, si associa il file [dbpam.mdf] al file SGBD:
![]() |
![]() |
- clic con il tasto destro su [Databases] / Allega
- selezionare il file [dbpam.mdf] tramite un pulsante [Add] non visualizzato
- il file allegato darà origine a un BD che non deve già esistere. Qui, nel campo [Attach As], è stato assegnato il nome [dbpam2] al nuovo BD.
- Si vede il nuovo file BD e le sue tabelle
Questa tecnica di associazione di un BD è utile per trasferire un BD da una postazione all’altra e la useremo occasionalmente in questa sede.
3.2. Modalità di calcolo dello lo stipendio di una tata
Presentiamo ora il metodo di calcolo dello stipendio mensile di un'assistente materna. Prendiamo come esempio lo stipendio della signora Marie Jouveinal, che ha lavorato 150 ore in 20 giorni durante il mese di riferimento.
Vengono presi in considerazione i seguenti elementi: | | |
Lo stipendio base dell'assistente all'infanzia è calcolato secondo la seguente formula: | ||
Da questo stipendio base devono essere trattenuti alcuni contributi sociali: | | |
Totale dei contributi sociali: | ||
Inoltre, l’assistente all’infanzia ha diritto, per ogni giorno lavorato, a un’indennità di mantenimento e a un’indennità di pasto. A tal titolo riceve le seguenti indennità: | | |
In definitiva, la retribuzione netta da corrispondere all’assistente materna è la seguente: |
3.3. Promemoria ADO.NET
L'applicazione per il calcolo delle retribuzioni necessita delle informazioni contenute nel database [dbpam]. La sua struttura sarà la seguente:
![]() |
- in [1], l'utente effettua una richiesta
- in [2], l’applicazione per il calcolo delle retribuzioni la elabora.
- A quel punto potrebbe aver bisogno dei dati del database. Effettua quindi una richiesta al provider ADO.NET del SGBD utilizzato da [4].
- Quest’ultimo interroga il database [5] e restituisce i risultati al provider ADO.NET, il quale a sua volta li inoltra all’applicazione
- quest’ultima elabora tali risultati e genera una risposta [5] per l’utente
Ricordiamo ora le principali interfacce offerte da un fornitore ADO.NET ai propri clienti [3].
In modalità connessa, l’applicazione:
- apre una connessione con la fonte dati
- opera con la fonte dati in modalità lettura/scrittura
- chiude la connessione
Tre interfacce ADO.NET sono principalmente interessate da queste operazioni:
- IDbConnection, che incapsula le proprietà e i metodi della connessione.
- IDbCommand, che incapsula le proprietà e i metodi del comando SQL eseguito.
- IDataReader, che incapsula le proprietà e i metodi del risultato di un comando SQL Select.
L'interfaccia IDbConnection
Serve a gestire la connessione al database. Tra i metodi M e le proprietà P di questa interfaccia figurano i seguenti:
Nome | Tipo | Ruolo |
P | Stringa di connessione al database. Specifica tutti i parametri necessari per stabilire la connessione con un database specifico. | |
M | apre la connessione con il database definito da ConnectionString | |
M | chiude la connessione | |
M | avvia una transazione. | |
P | stato della connessione: ConnectionState.Closed, ConnectionState.Open, ConnectionState.Connecting, ConnectionState.Executing, ConnectionState.Fetching, ConnectionState.Broken |
Se Connection è una classe che implementa l'interfaccia IDbConnection, l'apertura della connessione può avvenire come segue:
L'interfaccia IDbCommand
Serve per eseguire un comando SQL o una procedura memorizzata. Tra i metodi M e le proprietà P di questa interfaccia si trovano i seguenti:
Nome | Tipo | Ruolo |
P | indica cosa deve essere eseguito - prende i propri valori da un elenco: - CommandType.Text: esegue il comando SQL definito nella proprietà CommandText. È il valore predefinito. - CommandType.StoredProcedure: esegue una procedura memorizzata nel database | |
P | - il testo del comando SQL da eseguire se CommandType = CommandType.Text - il nome della procedura memorizzata da eseguire se CommandType = CommandType.StoredProcedure | |
P | la connessione IDbConnection da utilizzare per eseguire l'ordine SQL | |
P | la transazione IDbTransaction in cui eseguire l'ordine SQL | |
P | l'elenco dei parametri di un ordine SQL configurato. L'ordine update articles set price=price*1.1 where id=@id ha il parametro @id. | |
M | per eseguire un comando SQL Select. Si ottiene un oggetto IDataReader che rappresenta il risultato di Select. | |
M | per eseguire un comando SQL (Aggiorna, Inserisci, Elimina). Si ottiene il numero di righe interessate dall'operazione (aggiornate, inserite, eliminate). | |
M | per eseguire un comando SQL Select che restituisca un unico risultato, come in: select count(*) from articles. | |
M | per creare i parametri IDbParameter di un ordine SQL già configurato. | |
M | consente di ottimizzare l'esecuzione di una query parametrizzata quando viene eseguita più volte con parametri diversi. |
Se Command è una classe che implementa l'interfaccia IDbCommand, l'esecuzione di un comando SQL senza transazione avrà la seguente forma:
L'interfaccia IDataReader
serve a incapsulare i risultati di un comando SQL Select. Un oggetto IDataReader rappresenta una tabella con righe e colonne, che viene elaborata in modo sequenziale: prima la prima riga, poi la seconda, ... Tra i metodi M e le proprietà P di questa interfaccia si trovano i seguenti:
Nome | Tipo | Ruolo |
P | il numero di colonne della tabella IDataReader | |
M | GetName(i) restituisce il nome della colonna n. i della tabella IDataReader. | |
P | Item[i] rappresenta la colonna n. i della riga corrente della tabella IDataReader. | |
M | passa alla riga successiva della tabella IDataReader. Restituisce il valore booleano True se la lettura è andata a buon fine, False in caso contrario. | |
M | chiude la tabella IDataReader. | |
M | GetBoolean(i): restituisce il valore booleano della colonna n. i della riga corrente della tabella IDataReader. Gli altri metodi analoghi sono i seguenti: GetDateTime, GetDecimal, GetDouble, GetFloat, GetInt16, GetInt32, GetInt64, GetString. | |
M | Getvalue(i): restituisce il valore della colonna n. i della riga corrente della tabella IDataReader come tipo object. | |
M | IsDBNull(i) restituisce True se la colonna n. i della riga corrente della tabella IDataReader non ha alcun valore, il che è indicato dal valore SQL NULL. |
L'elaborazione di un oggetto IDataReader spesso si presenta come segue:









