3. El caso de estudio
Queremos desarrollar 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 generar la nómina se almacenan en una base de datos SQL Server Express llamada dbpam (pam = Nómina de Cuidadoras Infantiles). Esta base de datos tiene un administrador llamado «sa» con la contraseña «msde».
![]() |
La base de datos cuenta con 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 son independientes del empleado. La tabla anterior solo tiene una fila.
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 vinculadas a una cuidadora específica 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] pueden trasladarse a otra máquina y volver a vincularse al servidor SGBD SQL Server Express de esa máquina. A continuación se explica cómo hacerlo:
- Los archivos de BD y [dbpam] se duplican en una carpeta
![]() |
- se inicia SQL Server Express
- con el cliente SQL Server Management Studio Express, y se vincula el archivo [dbpam.mdf] al SGBD:
![]() |
![]() |
- clic derecho en [Databases] / Adjuntar
- seleccionar el archivo [dbpam.mdf] mediante un botón [Add] no representado
- el archivo adjunto generará un BD que no debe existir ya. Aquí, en el campo [Attach As], se le ha asignado el nombre [dbpam2] al nuevo BD.
- Se ve el nuevo archivo BD y sus tablas
Esta técnica de vincular un archivo BD es útil para trasladar un archivo BD de un puesto a otro y la utilizaremos en algunas ocasiones aquí.
3.2. Método de cálculo del salario de una cuidadora infantil
A continuación, presentamos la forma de calcular el salario mensual de una cuidadora infantil. Tomamos como ejemplo el salario de la Sra. Marie Jouveinal, quien trabajó 150 horas durante 20 días en el mes a pagar.
Se toman en cuenta los siguientes elementos: | | |
El salario base de la cuidadora infantil se calcula mediante la siguiente fórmula: | ||
De este salario base se deben deducir una serie de cotizaciones sociales: | | |
Total de contribuciones sociales: | ||
Además, la cuidadora infantil tiene derecho, por cada día trabajado, a una indemnización por gastos de manutención y a una indemnización por comida. Por este concepto, recibe las siguientes indemnizaciones: | | |
En definitiva, el salario neto que se le debe pagar a la cuidadora infantil es el siguiente: |
3.3. Recordatorios ADO.NET
La aplicación de cálculo de nómina 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ómina la procesa.
- Es posible que entonces necesite los datos de la base de datos. Por lo tanto, envía una consulta al proveedor (provider) ADO.NET del SGBD utilizado por [4].
- Este último consulta la base de datos [5] y devuelve los resultados al proveedor ADO.NET, quien a su vez los transmite a la aplicación
- esta procesa dichos resultados y elabora una respuesta [5] para el usuario
A continuación, repasamos las principales interfaces que un proveedor ADO.NET ofrece a sus clientes [3].
En modo conectado, la aplicación:
- abre una conexión con la fuente de datos
- trabaja con la fuente de datos en modo de 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 de la orden SQL ejecutada.
- 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 específica. | |
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 establecer 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 qué se debe ejecutar - toma sus valores de una enumeración: - CommandType.Text: ejecuta la orden SQL definida en la propiedad CommandText. Este 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 artículos set precio=precio*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 Select. | |
M | para ejecutar una orden SQL: Actualizar, Insertar, Eliminar. Se obtiene el número de filas 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 ya 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 las propiedades P de esta interfaz se encuentran los siguientes:
Nombre | Tipo | Función |
P | el 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 fila actual de la tabla IDataReader. | |
M | pasa a la siguiente línea de la tabla IDataReader. Devuelve el valor booleano True si se pudo realizar la lectura; de lo contrario, devuelve False. | |
M | cierra la tabla IDataReader. | |
M | GetBoolean(i): devuelve el valor booleano de la columna n.º i de la fila 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 fila actual de la tabla IDataReader como tipo object. | |
M | IsDBNull(i) devuelve True si la columna n.º i de la fila actual de la tabla IDataReader no tiene valor, lo cual se simboliza con el valor SQL NULL. |
La consulta de un objeto IDataReader suele ser similar a lo siguiente:









