3. Приклад із практики
Ми хочемо написати додаток .NET, що дозволить користувачеві проводити симуляції розрахунку заробітної плати вихователів дитячих садків асоціації «Дім раннього дитинства» в одній з громад. Ми зосередимося як на організації коду DotNet програми, так і на самому коді.
3.1. : база даних
Статичні дані, необхідні для формування розрахункового листка, розміщені в базі даних SQL Server Express під назвою dbpam (pam = Paie Assistante Maternelle). Ця база має адміністратора з іменем sa та паролем msde.
![]() |
База містить три таблиці: EMPLOYES, COTISATIONS та INDEMNITES, структура яких є такою:
Table EMPLOYES : rassemble des informations sur les différentes assistantes maternelles
Структура:
![]() |
|
Його вміст може бути таким:
![]()
Table COTISATIONS : rassemble les taux des cotisations sociales prélevées sur le salaire
Структура:
![]() |
Його вміст може бути таким:
Ставки соціальних внесків не залежать від працівника. Попередня таблиця містить лише один рядок.
Table INDEMNITES : rassemble les différentes indemnités dépendant de l'indice de l'employé
![]() |
|
Його зміст може бути таким:

Слід зазначити, що розмір надбавок може відрізнятися від однієї няні до іншої. Вони, а саме, прив’язані до конкретної няні через її індекс оплати праці. Так, пані Марі Жувенал, яка має індекс оплати праці 2 (таблиця EMPLOYES), отримує погодинну заробітну плату в розмірі 2,1 євро (таблиця INDEMNITES).
Взаємозв’язки між цими трьома таблицями такі:
![]() |
Між стовпцем EMPLOYES (INDICE) та стовпцем INDEMNITES (INDICE) існує зв’язок за чужим ключем.
Створена таким чином база даних [dbpam] генерує два файли в папці SQL Server Express:
![]() |
Файли [dbpam.mdf, dbpam_log.ldf] можна перенести на інший комп'ютер і знову підключити до сервера SGBD SQL Server Express на цьому комп'ютері. Для цього виконайте такі дії:
- файли BD та [dbpam] дублюються у папці
![]() |
- запускаємо SQL Server Express
- за допомогою клієнта SQL Server Management Studio Express, приєднайте файл [dbpam.mdf] до SGBD:
![]() |
![]() |
- клацнути правою кнопкою миші на [Databases] / Приєднати
- виберіть файл [dbpam.mdf] за допомогою кнопки [Add] (не показано)
- прикріплений файл створить файл BD, який ще не повинен існувати. Тут, у полі [Attach As], новому файлу BD було надано ім’я [dbpam2].
- Ми бачимо новий файл BD та його таблиці
Цей метод приєднання файлу BD є корисним для переміщення файлу BD з одного робочого місця на інше, і ми іноді будемо ним користуватися тут.
3.2. Спосіб розрахунку заробітної плати няні
Тепер розглянемо порядок розрахунку місячної заробітної плати виховательки. Як приклад візьмемо заробітну плату пані Марі Жувенал, яка пропрацювала 150 годин протягом 20 днів у місяці, за який виплачується заробітна плата.
Враховуються такі складові: | | |
Базова заробітна плата виховательки розраховується за такою формулою: | ||
З цієї базової заробітної плати слід утримувати певні соціальні внески: | | |
Загальна сума соціальних внесків: | ||
Крім того, вихователька має право на щоденну компенсацію витрат на утримання та компенсацію витрат на харчування за кожен відпрацьований день. З цієї причини вона отримує такі компенсації: | | |
У підсумку чиста заробітна плата, що підлягає виплаті виховательці, становить: |
3.3. Нагадування ADO.NET
Програма для розрахунку заробітної плати потребує інформації з бази даних [dbpam]. Її архітектура буде такою:
![]() |
- у [1] користувач надсилає запит
- у [2] програма розрахунку заробітної плати обробляє його.
- тоді їй можуть знадобитися дані з бази даних. Тоді вона надсилає запит до постачальника (provider) ADO.NET щодо SGBD, який використовується [4].
- Цей провайдер використовує базу даних [5] і повертає результати провайдеру ADO.NET, який, у свою чергу, передає їх програмі
- вона використовує ці результати та формує відповідь [5] для користувача
Тепер нагадаємо про основні інтерфейси, які постачальник ADO.NET надає своїм клієнтам [3].
У режимі підключення додаток:
- відкриває з'єднання з джерелом даних
- працює з джерелом даних у режимі читання/запису
- закриває з’єднання
Ці операції переважно стосуються трьох інтерфейсів ADO.NET:
- IDbConnection, який інкапсулює властивості та методи з’єднання.
- IDbCommand, що інкапсулює властивості та методи виконаного запиту SQL.
- IDataReader, що інкапсулює властивості та методи результату команди SQL Select.
Інтерфейс IDbConnection
Служить для управління з'єднанням із базою даних. Серед методів M та властивостей P цього інтерфейсу є такі:
Назва | Тип | Роль |
P | рядок підключення до бази даних. Він визначає всі параметри, необхідні для встановлення з'єднання з конкретною базою даних. | |
M | відкриває з’єднання з базою даних, визначеною в ConnectionString | |
M | закриває з’єднання | |
M | починає транзакцію. | |
P | стан з'єднання: ConnectionState.Closed, ConnectionState.Open, ConnectionState.Connecting, ConnectionState.Executing, ConnectionState.Fetching, ConnectionState.Broken |
Якщо Connection є класом, що реалізує інтерфейс IDbConnection, відкриття з’єднання можна здійснити наступним чином:
Інтерфейс IDbCommand
Використовується для виконання команди SQL або збереженої процедури. Серед методів M та властивостей P цього інтерфейсу є такі:
Назва | Тип | Роль |
P | вказує, що потрібно виконати — значення береться з переліку: - CommandType.Text: виконує команду SQL, визначену у властивості CommandText. Це значення за замовчуванням. - CommandType.StoredProcedure: виконує процедуру, збережену в базі даних | |
P | - текст команди SQL, яку слід виконати, якщо CommandType = CommandType.Text - ім’я збереженої процедури, яку слід виконати, якщо CommandType = CommandType.StoredProcedure | |
P | з'єднання IDbConnection, яке слід використовувати для виконання команди SQL | |
P | транзакція IDbTransaction, в якій слід виконати замовлення SQL | |
P | список параметрів налаштованого запиту SQL. Запит update articles set price=price*1.1 where id=@id має параметр @id. | |
M | для виконання запиту SQL Select. Отримуємо об’єкт IDataReader, що представляє результат запиту Select. | |
M | для виконання команди SQL «Оновити», «Вставити», «Видалити». Отримуємо кількість рядків, на які вплинула операція (оновлені, вставлені, видалені). | |
M | для виконання запиту SQL Select, який повертає лише один результат, як у запиті: select count(*) from articles. | |
M | для створення параметрів IDbParameter для налаштованого запиту SQL. | |
M | дозволяє оптимізувати виконання параметризованого запиту, коли він виконується багато разів з різними параметрами. |
Якщо Command є класом, що реалізує інтерфейс IDbCommand, виконання команди SQL без транзакції матиме такий вигляд:
Інтерфейс IDataReader
використовується для інкапсуляції результатів виконання команди SQL Select. Об’єкт IDataReader представляє таблицю зі рядками та стовпцями, які обробляються послідовно: спочатку перший рядок, потім другий, ... Серед методів M та властивостей P цього інтерфейсу є такі:
Назва | Тип | Роль |
P | кількість стовпців у таблиці IDataReader | |
M | GetName(i) повертає назву стовпця № i таблиці IDataReader. | |
P | Item[i] представляє стовпець № i поточного рядка таблиці IDataReader. | |
M | переходить до наступного рядка таблиці IDataReader. Повертає логічне значення True, якщо зчитування відбулося успішно, і False в іншому випадку. | |
M | закриває таблицю IDataReader. | |
M | GetBoolean(i): повертає булеве значення стовпця № i поточного рядка таблиці IDataReader. Інші аналогічні методи такі: GetDateTime, GetDecimal, GetDouble, GetFloat, GetInt16, GetInt32, GetInt64, GetString. | |
M | Getvalue(i): повертає значення стовпця № i поточного рядка таблиці IDataReader у вигляді типу object. | |
M | IsDBNull(i) повертає True, якщо стовпець № i поточного рядка таблиці IDataReader не має значення, що позначається значенням SQL NULL. |
Використання об’єкта IDataReader часто виглядає наступним чином:









