Курсовые работы / Разработка приложения на ЯВУ для доступа к базе данных
.pdfCASE-средство ERWin позволяет эффективно выполнять переход от логической модели к физической, так как обладает широким набором встроенных средств для так называемого «forward engineering». Используем пункт меню «Derive new model», указав в соответствующем меню СУБД SQL Server. Полученный результат:
Все типы данных приведены к соответствующим в MSSQL Server 2008.
Определим правила поддержания ссылочной целостности для связанных таблиц.
Отношение
Покупатель – Покупка
Parent Insert |
|
Parent Update |
Parent Delete |
|
Restrict |
|
Cascade |
Set Null |
|
Сотрудник – Покупка |
|
|
|
|
Parent Insert |
|
Parent Update |
Parent Delete |
|
Restrict |
|
Cascade |
Restrict |
|
Лекарство – Поставка |
|
|
|
|
Parent Insert |
|
Parent Update |
Parent Delete |
|
Restrict |
|
Cascade |
Restrict |
|
Поставщик – Поставка |
|
|
|
|
Parent Insert |
|
Parent Update |
Parent Delete |
|
Restrict |
|
Cascade |
Restrict |
|
Поставка – Покупка |
|
|
|
|
Parent Insert |
|
Parent Update |
Parent Delete |
|
Restrict |
|
Cascade |
Restrict |
|
Склад – Поставщик |
|
|
|
|
Parent Insert |
|
Parent Update |
Parent Delete |
|
Restrict |
|
Cascade |
Restrict |
|
11
Приведем информацию о созданных нами правилах валидации данных
и о таблице в целом, перед тем, как приступить к автоматической генерации
кода:
Table
Name
Customer
Employee
Medicine
Purchase
Supplier
Supply
Warehouse
Column(s) of "Customer" Table
Name |
|
Datatype |
Null Option |
Comment |
Customer_ID |
|
int |
NOT NULL |
|
FIO |
|
varchar(255) |
NOT NULL |
ФИО покупателя |
ContactPhone |
|
varchar(13) |
NOT NULL |
Контактный |
|
|
|
|
телефон |
Validation(s) of "ContactPhone" Column
Constraint Name |
Rule |
|
ValidPhone |
@phone LIKE '[0-9][0-9][0-9]- |
|
|
[0-9][0-9][0-9]-[0-9][0-9]-[0-9][0-9]' |
|
Column(s) of "Employee" Table
Name |
|
Datatype |
Null Option |
Comment |
|
Employee_ID |
|
integer |
NOT NULL |
|
|
FIO |
|
varchar(255) |
NOT NULL |
ФИО работника |
|
Salary |
|
money |
NOT NULL |
Зарплата |
|
DateOfDismissal |
|
datetime |
NULL |
Дата увольнения |
|
DateOfAcceptance |
|
datetime |
NOT NULL |
Дата |
приема на |
|
|
|
|
работу |
|
PassportNumber |
|
varchar(10) |
NOT NULL |
Номер паспорта |
|
EmploymentHistoryN |
|
varchar(255) |
NOT NULL |
Номер |
трудовой |
umber |
|
|
|
книжки |
|
Validation(s) of "Salary" Column
Constraint Name |
Rule |
|
ValidSalary |
@salary>0 |
|
Validation(s) of "PassportNumber" Column
Constraint Name |
Rule |
|
ValidPassport |
@passport LIKE '[0-9][0-9][0- |
|
|
9][0-9][0-9][0-9][0-9][0-9][0-9][0-9]' |
|
Column(s) of "Medicine" Table
Name |
|
Datatype |
Null Option |
Comment |
|
Medicine_ID |
|
int |
NOT NULL |
|
|
Dose |
|
integer |
NOT NULL |
Дозировка |
|
WayOfUse |
|
varchar(255) |
NOT NULL |
Способ применения |
|
Name |
|
varchar(255) |
NOT NULL |
Наименование |
|
|
|
|
|
лекарства |
|
Validation(s) of "Dose" Column
Constraint Name |
Rule |
|
ValidDose |
@col BETWEEN 0 AND 1000 |
|
Column(s) of "Purchase" Table
Name |
|
Datatype |
Null Option |
Comment |
12
Column(s) of "Purchase" Table
Name |
|
Datatype |
Null Option |
Comment |
Purchase_ID |
|
int |
NOT NULL |
|
Employee_ID |
|
int |
NOT NULL |
|
MedicineAmount |
|
integer |
NOT NULL |
Количество |
|
|
|
|
лекарства |
Customer_ID |
|
int |
NULL |
|
Medicine_ID |
|
int |
NOT NULL |
|
Supplier_ID |
|
int |
NOT NULL |
|
Validation(s) of "MedicineAmount" Column
Constraint Name |
Rule |
|
Positive |
@value > 0 |
|
Column(s) of "Supplier" Table
Name |
|
Datatype |
Null Option |
Comment |
|
Supplier_ID |
|
int |
NOT NULL |
|
|
OrganiztionName |
|
varchar(255) |
NOT NULL |
Название |
|
|
|
|
|
организации |
|
ContactPhone |
|
varchar(13) |
NOT NULL |
Контактный |
|
|
|
|
|
телефон |
|
DateOfConclusion |
|
datetime |
NOT NULL |
Дата |
подписания |
|
|
|
|
договора |
|
DateOfTermination |
|
datetime |
NULL |
Дата |
расторжения |
|
|
|
|
договора |
|
Warehouse_ID |
|
int |
NOT NULL |
|
|
Validation(s) of "ContactPhone" Column
Constraint Name |
Rule |
|
ValidPhone |
@phone LIKE '[0-9][0-9][0-9]- |
|
|
[0-9][0-9][0-9]-[0-9][0-9]-[0-9][0-9]' |
|
Column(s) of "Supply" Table
Name |
|
Datatype |
Null Option |
Comment |
Supplier_ID |
|
int |
NOT NULL |
|
Medicine_ID |
|
int |
NOT NULL |
|
Price |
|
money |
NOT NULL |
Цена лекарства |
Validation(s) of "Price" Column
Constraint Name |
Rule |
|
Positive |
@value > 0 |
|
Column(s) of "Warehouse" Table
Name |
|
Datatype |
Null Option |
Comment |
|
Warehouse_ID |
|
int |
NOT NULL |
|
|
Address |
|
varchar(255) |
NOT NULL |
Адрес склада |
|
ContactPhone |
|
varchar(13) |
NOT NULL |
Контактный |
|
|
|
|
|
телефон |
|
DateOfOpening |
|
datetime |
NOT NULL |
Дата открытия |
|
DateOfClosing |
|
datetime |
NULL |
Дата |
закрытия |
|
|
|
|
склада |
|
Validation(s) of "ContactPhone" Column
Constraint Name |
Rule |
|
ValidPhone |
@phone LIKE '[0-9][0-9][0-9]- |
|
|
[0-9][0-9][0-9]-[0-9][0-9]-[0-9][0-9]' |
|
Мы готовы сгенерировать код для автоматического создания базы данных при помощи встроенных средств программы ERWin – финального
этапа проектирования БД. Сделаем это:
13
Наблюдаем результат выполненной генерации БД. Закончив работу над проектированием и созданием БД, мы готовы приступить к ее заполнению.
Для этих целей используем встроенные средства программного продукта
SQL Server Management Studio:
14
Разработка программного продукта
Приступим к разработке программного продукта для работы с созданной базой данных.
Описание используемых технологий
В качестве ЯВУ для реализации продукта был выбран язык программирования C#, активно использовалась технология ADO .NET, при выборе СУБД, как уже было отмечено выше, я остановился на СУБД
Microsoft SQL Server 2008.
Дадим краткий обзор каждой из использованных технологий.
СУБД MSSQL Server 2008 |
|
|
|
Microsoft SQL |
Server — система |
управления реляционными базами |
|
данных (СУБД), |
разработанная |
корпорацией Microsoft. |
Основной |
используемый язык |
запросов —Transact-SQL, создан совместно |
Microsoft |
и Sybase. Язык T-SQL является реализацией SQL-92 (стандарт ISO для языка
15
SQL) с множественными расширениями. T-SQL позволяет использовать дополнительный синтаксис для хранимых процедур и обеспечивает поддержку транзакций (взаимодействие базы данных с управляющим приложением).
В SQL Server 2005 встроена поддержка .NET Framework. Благодаря этому хранимые процедуры БД могут быть написаны на любом языке платформы .NET, используя полный набор библиотек, доступных для .NET Framework, включая Common Type System (система обращения с типами данных в Microsoft .NET Framework). Однако, в отличие от других процессов,
.NET Framework, будучи базисной системой для SQL Server 2005, выделяет дополнительную память и выстраивает средства управления SQL Server
вместо того, чтобы использовать встроенные средства Windows. Это повышает производительность в сравнении с общими алгоритмами Windows,
так как алгоритмы распределения ресурсов специально настроены для использования в структурах SQL Server.
Язык программирования C#
C# (произносится си шарп) — объектно-ориентированный язык
программирования. Разработан в 1998—2001 годах группой инженеров под руководством Андерса Хейлсберга в компании Microsoft как язык разработки приложений для платформы Microsoft .NET Framework. Впоследствии для языка были определены стандарты ISO и ECMA.
C# относится к семье языков с C-подобным синтаксисом, из них его
синтаксис наиболее близок к C++ и Java. Язык имеет статическую
типизацию, поддерживает полиморфизм, перегрузку операторов (в том числе
операторов |
явного и неявного приведения |
типа), делегаты, |
|
атрибуты, события, свойства, обобщѐнные типы |
и |
методы, итераторы, |
|
анонимные |
|
|
функции с |
поддержкой замыканий, LINQ, исключения, комментарии в формате XML. 16
Переняв многое от |
своих |
предшественников — |
языков |
C++, |
Java, Delphi, Модула и |
Smalltalk — |
С#, опираясь на |
практику |
их |
использования, исключает некоторые модели, зарекомендовавшие себя как проблематичные при разработке программных систем, например, C# не поддерживает множественное наследование классов (в отличие от C++).
ADO .NET
ADO .NET (ActiveX Data Objects .NET) является набором классов,
реализующих программные интерфейсы для облегчения подключения к базам данных из приложения независимо от особенностей реализации конкретной системы управления базами данных и от структуры самой базы данных, а также независимо от места расположения этой самой базы — в
частности, в распределенной среде (клиент-серверное приложение) на стороне сервера.
ADO .NET широко используется совместно с технологией web-
программирования с использованием объектов ASP .NET для доступа к расположенным на сервере базам данных со стороны клиента.
Решение даже самой простой задачи, связанной с данными,
предполагает использование множества разнообразных объектов – представителей классов ADO .NET, которые находятся между собой в достаточно сложных взаимоотношениях.
Описание процесса реализации
Первое, что было необходимо выполнить при реализации программного продукта – установить соединение с базой данных.
Встроенные средства среды разработки MS Visual Studio 2010 позволили крайне эффективно и быстро выполнить эту задачу.
Достаточно выделить на полоске меню пункт «Данные», затем подпункт «Добавить новый источник данных», после этого указать все
17
необходимые сведения о сервере, к которому мы планируем подключиться.
Затем средой создается строка подключения (изменить которую можно в параметрах проекта), сгенерирован объект aptekaDataSet для представления данных в оперативной памяти и набор адаптеров для таблиц базы данных:
После этого я приступил к реализации самой первой функции приложения – просмотра и редактирования таблиц в приложении. Для этого понадобилось отредактировать автоматически сгенерированные адаптеры для таблиц, а именно создать полный набор необходимых команд. Добавив в каждом адаптере UpdateCommand, InsertCommand и DeleteCommand к
имеющейся там SelectCommand, мы получили набор адаптеров, требуемый для реализации необходимой функциональности.
Приведем скриншот окна и опишем процесс взаимодействия пользователя с ним:
18
При помощи выпадающего списка пользователь выбирает таблицу, с
которой он хочет работать. После этого устанавливается соединение с базой данных, и при помощи соответствующего выбранной таблице адаптера объект aptekaDataSet заполняется данными, которые отображаются на экране.
Компонент для отображения данных на экране является активным, т.е.
пользователь может изменять, удалять и добавлять записи прямо в этом окне.
После всех внесенных изменений ему необходимо их зафиксировать путем нажатия на кнопку. Приведем код обработчика одного из событий на форме.
private void TableChoice_SelectedIndexChanged(object sender, EventArgs e) { try {
switch (TableChoice.SelectedIndex) { case 0:
medicineAdapter.Fill(aptekaDataSet.Medicine); TableView.DataSource = aptekaDataSet.Medicine;
break; case 1:
customerAdapter.Fill(aptekaDataSet.Customer); TableView.DataSource = aptekaDataSet.Customer;
break; case 2:
purchaseAdapter.Fill(aptekaDataSet.Purchase);
19
TableView.DataSource = aptekaDataSet.Purchase;
break; case 3:
supplyAdapter.Fill(aptekaDataSet.Supply); TableView.DataSource = aptekaDataSet.Supply;
break; case 4:
supplierAdapter.Fill(aptekaDataSet.Supplier); TableView.DataSource = aptekaDataSet.Supplier; break;
case 5: employeeAdapter.Fill(aptekaDataSet.Employee); TableView.DataSource = aptekaDataSet.Employee; break;
case 6: warehouseAdapter.Fill(aptekaDataSet.Warehouse); TableView.DataSource = aptekaDataSet.Warehouse; break;
}
}
catch (SqlException s) { MessageBox.Show(s.Message); }
}
Как мы видим, для заполнения объекта aptekaDataSet используется метод Fill соответствующего требуемой таблице адаптера. После этого мы обращаемся к члену объекта aptekaDataSet, соответствующему выбранной пользователем таблице и назначаем его источником данных для последующего отображения на форме.
В случае некорректной работы одного или более адаптеров возбуждается исключение типа SqlException, которое успешно отлавливается последующей инструкцией catch.
После того, как я закончил реализацию этой части курсового, я
приступил к разработке следующей функциональной части приложения – окна выполнения произвольных запросов к базе данных.
Приведем его скриншот:
20