3. Il caso di studio
Vogliamo scrivere un'applicazione .NET che consenta a un utente di simulare i calcoli delle buste paga per gli operatori dell'assistenza all'infanzia presso l'associazione "Maison de la petite enfance" in un comune. Ci concentreremo tanto sull'organizzazione del codice .NET dell'applicazione quanto sul codice stesso.
3.1. Il database
I dati statici necessari per generare la busta paga sono memorizzati in un database SQL Server Express denominato dbpam (pam = Paie Assistante Maternelle). Questo database ha un amministratore denominato sa con la password msde.
![]() |
Il database contiene tre tabelle, EMPLOYEES, CONTRIBUTIONS e ALLOWANCES, con la seguente struttura:
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 contenuto potrebbe essere il seguente:
Le aliquote dei contributi previdenziali sono indipendenti dal dipendente. La tabella precedente ha 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 operatore all’altro. Esse sono collegate a un operatore specifico tramite la sua categoria retributiva. Pertanto, la sig.ra Marie Jouveinal, che ha una categoria retributiva 2 (tabella EMPLOYEES), 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 EMPLOYEES(INDEX) e la colonna ALLOWANCES(INDEX).
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 sistema di gestione del database SQL Server Express di quel computer. Ecco come procedere:
- I file del database [dbpam] vengono copiati in una cartella
![]() |
- Avviare SQL Server Express
- Utilizzando il client SQL Server Management Studio Express, collegare il file [dbpam.mdf] al database:
![]() |
![]() |
- Fai clic con il pulsante destro del mouse su [Database] / Collega
- Selezionare il file [dbpam.mdf] utilizzando il pulsante [Aggiungi] (non mostrato)
- Il file collegato creerà un database che non deve già esistere. Qui, nel campo [Collega come], abbiamo denominato il nuovo database [dbpam2].
- È possibile visualizzare il nuovo database e le sue tabelle
Questa tecnica per collegare un database è utile per trasferire un database da un computer all'altro e la useremo occasionalmente in questa guida.
3.2. Metodo di calcolo dello stipendio di un operatore dell'assistenza all'infanzia
Vi presenteremo ora il metodo di calcolo dello stipendio mensile di un'assistente all'infanzia. Come esempio, useremo lo stipendio della signora Marie Jouveinal, che ha lavorato 150 ore in 20 giorni durante il periodo di paga.
Si tiene conto dei seguenti fattori: | | |
Lo stipendio base dell'assistente all'infanzia viene calcolato utilizzando la seguente formula: | ||
Da questo stipendio base devono essere detratti alcuni contributi previdenziali: | | |
Totale contributi previdenziali: | ||
Inoltre, l’assistente all’infanzia ha diritto a un’indennità di soggiorno e a un’indennità di vitto per ogni giorno lavorato. Pertanto, riceve le seguenti indennità: | ||
Alla fine, lo stipendio netto da corrispondere alla tata è il seguente: |
3.3. Promemoria su ADO.NET
L'applicazione per il calcolo delle buste paga richiede informazioni dal database [dbpam]. La sua architettura sarà la seguente:
![]() |
- In [1], l'utente effettua una richiesta
- In [2], l'applicazione per il calcolo delle buste paga la elabora.
- Potrebbero quindi essere necessari dati dal database. A quel punto invia una query al provider ADO.NET del DBMS in uso [4].
- Il provider accede al database [5] e restituisce i risultati al provider ADO.NET, che a sua volta li trasmette all'applicazione
- L'applicazione elabora questi risultati e genera una risposta [5] per l'utente
Esamineremo ora le principali interfacce fornite da un provider ADO.NET ai propri clienti [3].
In modalità connessa, l'applicazione:
- apre una connessione all'origine dati
- opera con l'origine dati in modalità lettura/scrittura
- chiude la connessione
Tre interfacce ADO.NET sono principalmente coinvolte in 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'istruzione SQL SELECT.
L'interfaccia IDbConnection
viene utilizzata per gestire la connessione al database. Tra i metodi (M) e le proprietà (P) di questa interfaccia vi sono i seguenti:
Nome | Tipo | Ruolo |
P | Stringa di connessione al database. Specifica tutti i parametri necessari per stabilire una connessione con un database specifico. | |
M | Apre la connessione al 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, la connessione può essere aperta come segue:
L'interfaccia IDbCommand
viene utilizzata per eseguire un'istruzione SQL o una procedura memorizzata. Tra i metodi M e le proprietà P di questa interfaccia vi sono i seguenti:
Nome | Tipo | Ruolo |
P | specifica cosa eseguire - prende i propri valori da un'enumerazione: - CommandType.Text: esegue l'istruzione SQL definita nella proprietà CommandText. Questo è il valore predefinito. - CommandType.StoredProcedure: esegue una procedura memorizzata nel database | |
P | - il testo dell'istruzione 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'istruzione SQL | |
P | la transazione IDbTransaction in cui eseguire l'istruzione SQL | |
P | L'elenco dei parametri per un'istruzione SQL parametrizzata. L'istruzione `update articles set price=price*1.1 where id=@id` ha il parametro `@id`. | |
M | Per eseguire un'istruzione SQL SELECT. Restituisce un oggetto IDataReader che rappresenta il risultato dell'istruzione SELECT. | |
M | per eseguire un'istruzione SQL Update, Insert o Delete. Viene restituito il numero di righe interessate dall'operazione (aggiornate, inserite o eliminate). | |
M | per eseguire un'istruzione SQL Select che restituisce un singolo risultato, ad esempio: select count(*) from articles. | |
M | per creare i parametri IDbParameter di un'istruzione SQL parametrizzata. | |
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'istruzione SQL senza transazione assumerà la seguente forma:
L'interfaccia IDataReader
Utilizzata per incapsulare i risultati di un'istruzione SQL Select. Un oggetto IDataReader rappresenta una tabella con righe e colonne, che vengono elaborate in sequenza: prima la prima riga, poi la seconda e così via. Tra i metodi (M) e le proprietà (P) di questa interfaccia vi sono i seguenti:
Nome | Tipo | Ruolo |
P | Il numero di colonne nella tabella IDataReader | |
M | GetName(i) restituisce il nome della colonna i nella tabella IDataReader. | |
P | Item[i] rappresenta la colonna numero i della riga corrente nella tabella IDataReader. | |
M | Passa alla riga successiva nella tabella IDataReader. Restituisce True se la riga è stata letta correttamente, False in caso contrario. | |
M | Chiude la tabella IDataReader. | |
M | GetBoolean(i): restituisce il valore booleano della colonna i nella riga corrente della tabella IDataReader. Altri metodi simili includono: GetDateTime, GetDecimal, GetDouble, GetFloat, GetInt16, GetInt32, GetInt64, GetString. | |
M | Getvalue(i): restituisce il valore della colonna i nella riga corrente della tabella IDataReader come tipo di oggetto. | |
M | IsDBNull(i) restituisce True se la colonna i della riga corrente nella tabella IDataReader non ha alcun valore, il che è rappresentato dal valore SQL NULL. |
L'utilizzo di un oggetto IDataReader spesso si presenta come segue:









