3. El caso práctico
Queremos escribir una aplicación .NET que permita a un usuario realizar simulaciones del cálculo de la nómina de las cuidadoras infantiles de la asociación «Maison de la petite enfance» de un municipio. Nos centraremos tanto en la organización del código DotNet de la aplicación como en el código en sí.
3.1. La base de datos « »
Los datos estáticos necesarios para elaborar la nómina se almacenan en una base de datos SQL Server Express denominada dbpam (pam = Paie Assistante Maternelle). Esta base de datos tiene un administrador llamado sa con la contraseña msde.
![]() |
La base de datos tiene tres tablas, EMPLOYES, COTISATIONS y INDEMNITES, cuya estructura es la siguiente:
Table EMPLOYES : rassemble des informations sur les différentes assistantes maternelles
Estructura:
![]() |
|
Su contenido podría ser el siguiente:
Table COTISATIONS : rassemble les taux des cotisations sociales prélevées sur le salaire
Estructura:
![]() |
Su contenido podría ser el siguiente:
Las tasas de las cotizaciones sociales cotisations son independientes del empleado. La tabla anterior solo tiene una línea.
Table INDEMNITES : rassemble les différentes indemnités dépendant de l'indice de l'employé
![]() |
|
Su contenido podría ser el siguiente:
![]() |
Cabe señalar que las indemnizaciones pueden variar de una cuidadora a otra. De hecho, están asociadas a una cuidadora concreta a través de su índice salarial. Así, la Sra. Marie Jouveinal, que tiene un índice salarial de 2 (tabla EMPLOYES), tiene un salario por hora de 2,1 euros (tabla INDEMNITES).
Las relaciones entre las tres tablas son las siguientes:
![]() |
Existe una relación de clave externa entre la columna EMPLOYES (INDICE) y la columna INDEMNITES (INDICE).
La base de datos [dbpam] así creada genera dos archivos en la carpeta de SQL Server Express:
![]() |
Los archivos [dbpam.mdf, dbpam_log.ldf] de pueden trasladarse a otro equipo y volver a vincularse al SGBD SQL Server Express de ese equipo. A continuación se explica cómo hacerlo:
- Los archivos BD y [dbpam] están duplicados en una carpeta
![]() |
- se inicia SQL Server Express
- con el cliente SQL Server Management Studio Express, se adjunta el archivo [dbpam.mdf] al SGBD:
![]() |
![]() |
- clic con el botón derecho en [Databases] / Adjuntar
- selección del archivo [dbpam.mdf] mediante un botón [Add] no representado
- el archivo adjunto dará lugar a un BD que no debe existir ya. Aquí, en el campo [Attach As], se le ha dado el nombre [dbpam2] al nuevo BD.
- Se ve el nuevo BD y sus tablas
Esta técnica de adjuntar un BD es útil para trasladar un BD de un puesto a otro y la utilizaremos en ocasiones aquí.
3.2. Método de cálculo del salario de una asistente maternal ( )
A continuación, presentamos el método de cálculo del salario mensual de una cuidadora infantil. Tomamos como ejemplo el salario de la Sra. Marie Jouveinal, que trabajó 150 horas durante 20 días en el mes a pagar.
Se tienen en cuenta los siguientes elementos: | | |
El salario base de la cuidadora infantil se calcula mediante la siguiente fórmula: | ||
De este salario base deben deducirse una serie de cotizaciones sociales: | | |
Total de cotisations sociales: | ||
Además, la cuidadora tiene derecho, por cada día trabajado, a una indemnización por gastos de manutención y a una indemnización por comida. A este respecto, percibe las siguientes indemnizaciones: | | |
En definitiva, el salario net que se debe pagar a la cuidadora es el siguiente: |
3.3. Recordatorios ADO.NET
La aplicación de cálculo de nóminas necesita la información de la base de datos [dbpam]. Su arquitectura será la siguiente:
![]() |
- en [1], el usuario realiza una solicitud
- en [2], la aplicación de nóminas la procesa.
- Entonces puede necesitar los datos de la base de datos. A continuación, realiza una consulta al proveedor (provider) ADO.NET del SGBD utilizado [4].
- Este utiliza la base de datos [5] y devuelve los resultados al proveedor ADO.NET, quien a su vez los transmite a la aplicación
- esta utiliza dichos resultados y elabora una respuesta [5] para el usuario
Recordemos ahora las principales interfaces que presenta un proveedor ADO.NET a sus clients [3].
En modo conectado, la aplicación:
- abre una conexión con la fuente de datos
- trabaja con la fuente de datos en modo lectura/escritura
- cierra la conexión
Hay tres interfaces ADO.NET que se ven principalmente afectadas por estas operaciones:
- IDbConnection, que encapsula las propiedades y métodos de la conexión.
- IDbCommand, que encapsula las propiedades y métodos del comando SQL ejecutado.
- IDataReader, que encapsula las propiedades y métodos del resultado de una orden SQL Select.
La interfaz IDbConnection
Sirve para gestionar la conexión con la base de datos. Entre los métodos M y las propiedades P de esta interfaz se encuentran los siguientes:
Nombre | Tipo | Función |
P | cadena de conexión a la base de datos. Especifica todos los parámetros necesarios para establecer la conexión con una base de datos concreta. | |
M | abre la conexión con la base de datos definida por ConnectionString | |
M | cierra la conexión | |
M | inicia una transacción. | |
P | estado de la conexión: ConnectionState.Closed, ConnectionState.Open, ConnectionState.Connecting, ConnectionState.Executing, ConnectionState.Fetching, ConnectionState.Broken |
Si Connection es una clase que implementa la interfaz IDbConnection, la conexión se puede abrir de la siguiente manera:
La interfaz IDbCommand
Sirve para ejecutar una orden SQL o un procedimiento almacenado. Entre los métodos M y las propiedades P de esta interfaz se encuentran los siguientes:
Nombre | Tipo | Función |
P | indica lo que hay que ejecutar - toma sus valores de una enumeración: - CommandType.Text: ejecuta la orden SQL definida en la propiedad CommandText. Es el valor por defecto. - CommandType.StoredProcedure: ejecuta un procedimiento almacenado en la base | |
P | - el texto de la orden SQL que se ejecutará si CommandType = CommandType.Text - el nombre del procedimiento almacenado que se ejecutará si CommandType = CommandType.StoredProcedure | |
P | la conexión IDbConnection que se utilizará para ejecutar la orden SQL | |
P | la transacción IDbTransaction en la que se ejecutará la orden SQL | |
P | la lista de parámetros de una orden SQL configurada. La orden «update articles set price=price*1.1 where id=@id» tiene el parámetro @id. | |
M | para ejecutar una orden SQL Select. Se obtiene un objeto IDataReader que representa el resultado de la consulta Select. | |
M | para ejecutar una orden SQL Update, Insert, Delete. Se obtiene el número de líneas afectadas por la operación (actualizadas, insertadas, eliminadas). | |
M | para ejecutar una orden SQL Select que devuelva un único resultado, como en: select count(*) from articles. | |
M | para crear los parámetros IDbParameter de una orden SQL configurada. | |
M | permite optimizar la ejecución de una consulta parametrizada cuando se ejecuta varias veces con parámetros diferentes. |
Si Command es una clase que implementa la interfaz IDbCommand, la ejecución de una orden SQL sin transacción tendrá la siguiente forma:
La interfaz IDataReader
Sirve para encapsular los resultados de una orden SQL Select. Un objeto IDataReader representa una tabla con filas y columnas, que se procesan secuencialmente: primero la primera fila, luego la segunda, ... Entre los métodos M y propiedades P de esta interfaz se encuentran los siguientes:
Nombre | Tipo | Función |
P | Número de columnas de la tabla IDataReader | |
M | GetName(i) devuelve el nombre de la columna n.º i de la tabla IDataReader. | |
P | Item[i] representa la columna n.º i de la línea actual de la tabla IDataReader. | |
M | pasa a la siguiente línea de la tabla IDataReader. Devuelve el valor booleano True si se ha podido realizar la lectura, False en caso contrario. | |
M | cierra la tabla IDataReader. | |
M | GetBoolean(i): devuelve el valor booleano de la columna n.º i de la línea actual de la tabla IDataReader. Los demás métodos análogos son los siguientes: GetDateTime, GetDecimal, GetDouble, GetFloat, GetInt16, GetInt32, GetInt64, GetString. | |
M | Getvalue(i): devuelve el valor de la columna n.º i de la línea actual de la tabla IDataReader como tipo objeto. | |
M | IsDBNull(i) devuelve True si la columna n.º i de la línea actual de la tabla IDataReader no tiene valor, lo que se simboliza con el valor SQL NULL. |
La evaluación de un objeto IDataReader suele ser similar a lo siguiente:










