Вы находитесь на странице: 1из 5

ЛАБОРАТОРНАЯ РАБОТА.

Разработка Windows приложения базы данных в заданной предметной области.

Цель работы: Получить навыки использования объекты ADO.NET для создания приложений баз
данных с удобным для пользователя графическим интерфейсом. Изучить технологию связывания
элементов управления с источниками данных.

1. ТЕОРЕТИЧЕСКИЕ СВЕДЕНИЯ
2. ЗАДАНИЕ
3. МЕТОДИЧЕСКИЕ УКАЗАНИЯ И ПРИМЕРЫ
4. ОФОРМЛЕНИЕ ОТЧЕТА
5. КОНТРОЛЬНЫЕ ВОПРОСЫ
6. ЛИТЕРАТУРА

1. ТЕОРЕТИЧЕСКИЕ СВЕДЕНИЯ
Объект DataSet (хранилище)
DataSet — это класс, содержащий в себе одну или несколько таблиц DataTable и связи между ними. Класс DataSet — это
представление в памяти информации, считанной через ADO из баз данных или XML. Он позволяет манипулировать
данными после отключения от источника данных.
DataSet состоит из объектов типа DataTable и объектов DataRelation. В коде к ним можно обращаться как к свойствам
объекта DataSet, т.е., используя точечную нотацию. Свойство Tables возвращает объект типа DataTableCollection, который
содержит все объекты DataTable используемой базы данных.

Объекты DataTable и DataColumn (таблицы и поля)


Объекты DataTable используются для представления таблиц в DataSet. DataTable представляет одну таблицу из базы данных.
В свою очередь, DataTable составляется из объектов DataColumn.
DataColumn - это блок для создания схемы DataTable. Каждый объект DataColumn имеет свойство DataType, которое
определяет тип данных, содержащихся в каждом объекте DataColumn. Например, вы можете ограничить тип данных до
целых, строковых и десятичных чисел. Поскольку данные, содержащиеся в DataTable, обычно переносятся обратно в
исходный источник данных, вы должны согласовывать тип данных с источником.

Объект DataRelation (связь)


Объект DataSet имеет также свойство Relations, возвращающее коллекцию DataRelationCollection, которая в свою очередь
состоит из объектов DataRelation. Каждый объект DataRelation выражает отношение между двумя таблицами (сами таблицы
связаны по какому-либо полю (столбцу). Следовательно, эта связь осуществляется через объект DataColumn).

Объект DataRow (строка)


Коллекция Rows объекта DataTable возвращает набор строк (записей) заданной таблицы. Эта коллекция используется для
изучения результатов запроса к базе данных. Мы можем обращаться к записям таблицы как к элементам простого массива.

Объект DataAdapter (посредник)


DbDataAdapter является родительским классом для SqlDataAdapter, OleDbDataAdapter, OdbcDataAdapter. Этот класс
содержит 4 объекта типа Command:

1
SelectCommand — эта команда используется для выборки данных из базы. При этом класс DataTable заполняется данными.
UpdateCommand — обновляет данные (редактирование записей).
InsertCommand — добавление новых записей.
DeleteCommand — команда для удаления записей.
Классы DataAdapter обеспечивают двусторонний обмен информацией между базой данных и локальным хранилищем.

Функциональные возможности DataAdapter 'а реализуются за счет:


 метода Fill, который изменяет данные в DataSet. При выполнении метода Fill объект DataAdapter заполняет
DataTable или DataSet данными, полученными из БД. После обработки данных, загруженных в память, с помощью
метода Update можно записать модифицированные записи в БД;
 метода Update, который позволяет изменять данные в источнике данных с целью достижения обратного
соответствия данных в источнике данных по отношению к данным в DataSet.
Метод Fill класса DbDataAdapter заполняет объекты DataSet или DataTable данными, прочитанными в результате
выполнения команды SelectCommand. Эта команда должна быть запросом SQL типа Select. Если таблицы уже существуют, в
него добавляются новые таблицы.

Основные элементы класса DataAdapter


AcceptChangesDuringFill - Свойство, которое указывает, вызывается ли метод AcceptChanges()в объекте DataRowпосле его
добавления к таблице при выполнении метода Fill().
AcceptChangesDuringUpdate - Свойство указывает, вызывается ли метод AcceptChanges()при выполнении метода Update().
ContinueUpdateOnError - Свойство указывает, следует ли генерировать исключение при ошибке во время обновления строки.
Fill() - Метод добавляет или обновляет строки в DataSetили таб-лице для получения соответствия строкам в источнике
данных.
FillError - Это событие генерируется при возникновении ошибки во время работы операции заполнения.
FillLoadOption - Значение из перечисления LoadOption. Определяет, как адаптер заполняет DataTableиз объекта
DataReaderFillSchema() Добавляет таблицу к указанному объекту DataSetи на-страивает схему таблицы.
GetFillParameters() - Получает параметры, заданные пользователем при выполнении оператора SELECT.
MissingMappingAction -Определяет действие, выполняемое, если входные данные не соответствуют таблице или столбцу
MissingSchemaAction Определяет действие, выполняемое, если существующая схема DataSetне соответствует входным
данным ResetFillLoadOption() Сбрасывает свойство FillLoadOptionк состоянию по умолчанию.
ReturnProviderSpecificTypes - Свойство указывает, должен ли метод Fill()возвращать зависящие от поставщика значения или
обычные CLS-совместимые значения.
TableMappings - Коллекция, обеспечивающая основное сопоставление ме-жду исходной таблицей и объектом DataTable.
Update() - Вызывает операторы INSERT, UPDATE или DELETE для каж-дой вставленной, обновлённой или удалённой
строки в указанном наборе данных или таблице.

2. ЗАДАНИЕ
Создать приложение баз данных с визуализацией посредством Windows-форм, соответствующее
предметной области вашего варианта, которое будет выполнять следующие функции:
отображение данных, занесенных в таблицы в табличных элементах управления Windows- форм
(формы);
ввод и редактирование записей таблиц;
удаление записей таблиц;
фильтрацию по одному или нескольким полям.
Форма (формы), отображающие данные таблиц, стоящих на стороне отношения «многие» схемы
базы данных, должны выводить вместо числовых кодов внешних ключей смысловые значения из
связанных таблиц, стоящих на стороне отношения «один».
Доступ к данным должен осуществляться средствами ADO.NET. Для визуализации данных
следует использовать связывания элементов управления (типа TextBox, ListBox, ComboBox,
DataGridView) с источниками объектами типа Da-taSet, DataTable, DataView.
Количество подлежащих разработке Windows-форм определяется исходя из требования, что они
должны позволять в удобном для пользователя представлении: отображать, фильтровать, добавлять,
удалять и редактирования информацию не менее чем из трех таблиц базы данных. Не менее, чем одна
из таблиц должна находиться на стороне отношения «многие» схемы базы данных.
Windows-формы (Windows форма) должны содержать текстовые поля, поля со списком,
табличные элементы управления, управляющие (командные) кнопки и надписи, возможно – меню,
вкладки и др.

3. МЕТОДИЧЕСКИЕ УКАЗАНИЯ И ПРИМЕРЫ


При определении объектов ADO .NET DataAdapter был назван адаптером, преобразователем,
предназначенным для взаимодействия с базой данных. Это действительно так, однако если

2
рассматривать взаимодействие с базой данных более глубоко, то выясняется, что в ADO .NET есть
специализированный объект для выполнения запросов, называемый Command. Под запросами
понимается выполнение SQL-конструкций или запуск хранимых процедур. Этот объект среда
создает неявным образом в методе InitializeComponent. Данный объект обладает следующими
свойствами.
Connection – подключение к базе данных. Можно использовать как суще- ствующее
подключение, так и создавать новое.
CommandType – тип команды (запроса), который будет направляться к базе данных. Возможны
следующие значения:
 Text. Текстовая команда состоит из SQL-конструкции, направляемой к базе данных. Это
значение используется по умолчанию.
 StoredProcedure. Текстовая команда состоит из названия хранимой процедуры.
 TableDirect. Текстовая команда состоит из названия таблицы базы данных. В результате
извлекается все содержимое таблицы. Эта команда аналогична текстовой команде SELECT *
FROM Название_таблицы. Данная команда поддерживается только управляемым поставщиком
OLE DB.
 CommandText – собственно сам текст запроса.

Чтобы выполнить запрос, свойству Connection объекта Command следует задать объект – имя
созданного объекта Connection:

// создание, инициализация и открытие объекта Connection


OleDbConection conn = new OleDbConnection();
conn.ConnectionString = ConnectionString; // содержание строки в лекциях
conn.Open();

// создание объекта Command и связывание его с объектом Connection OleDbCommand


myCommand = new OleDbCommand(); myCommand.Connection = conn;

Объект Connection также предоставляет метод CreateCommand, позволяющий упростить


данный процесс – этот метод возвращает новый объект Command, уже инициализированный для
использования созданного объекта Connection:
OleDbConnection conn = new OleDbConnection(); conn.ConnectionString = ConnectionString; conn.Open();
OleDbCommand myCommand = conn.CreateCommand();

Эти два способа создания и инициализации объекта Command эквивалентны. Теперь следует
определить SQL-запрос, который будет извлекать данные. Как и для строки соединения, будем
использовать запрос из предыдущего приложения.
Для хранения текста команды объект myСommand имеет свойство CommandText. Чтобы
избежать путаницы, изменим название переменной – CommandText на commandText (с маленькой
буквы):
MyCommand.CommandText = commandText;

Создаем объект OleDbDataAdapter:


OleDbDataAdapter dataAdapter = new OleDbDataAdapter();

Объект dataAdapter имеет свойство SelectCommand, в котором мы и будем указывать объект


myCommand:
dataAdapter.SelectCommand = myCommand;

Создаем объект DataSet:


DataSet ds = new DataSet();

Заполняем ds данными из dataAdapter:


dataAdapter.Fill(ds, "Туристы");

3
Указываем источник данных DataSource для dataGrid1:
dataGrid1.DataSource = ds.Tables["Туристы"].DefaultView;

Закрываем соединение явным образом:


conn.Close();

Полный листинг конструктора формы выглядит так:

public Form1()
{
InitializeComponent();
string commandText = "SELECT Фамилия, Имя, Отчество FROM Туристы";
string ConnectionString = @"Provider=Microsoft.Jet.OLEDB.4.0; Data
Source=d:\РПБДИС\examples\BDTur_firm.mdb";
OleDbConnection conn=new OleDbConnection(ConnectionString);
conn.Open();
OleDbCommand MyCommand=new OleDbCommand();
MyCommand.Connection = conn;
//или OleDbCommand MyCommand=conn.CreateCommand();
MyCommand.CommandText = commandText;
OleDbDataAdapter dataAdapter = new OleDbDataAdapter();
dataAdapter.SelectCommand = MyCommand;
DataSet ds = new DataSet();
dataAdapter.Fill(ds, "Туристы");
dataGridView1.DataSource = ds.Tables["Туристы"].DefaultView;
conn.Close();

Работа с базой данных SQL аналогична рассмотренному примеру. Отличие заключается в


использовании вместо классов OleDbConnection, OleDbCommand, OleDbDataAdapter классов
SqlConnection, SqlCommand, SqlDataAdapter соответственно.
Отметим, что оба подхода (визуальный и ручной) к созданию и использованию объектов ADO
обладают своими областями применения. Для упрощения разработки и сопровождения визуальных
форм проще использовать визуальный подход. При создании приложений, от которых требуется
надежность, гибкость или отсутствие экранных форм (например, Web-сервис) лучше создавать
объекты ADO вручную.
При визуальном подходе наряду с представлением данных в виде таблицы часто приходится
использовать традиционные элементы интерфейса, такие как TextBox, Label и пр.

4. ОФОРМЛЕНИЕ ОТЧЕТА
Отчет должен содержать:
 Графическое представление разработанной Windows-формы (форм).
 Кода класса (классов) разработанной Windows формы (форм).

5. КОНТРОЛЬНЫЕ ВОПРОСЫ

1. Дайте общую характеристику ADO.NET. Реализация паттерна «Абстрактная фабрика» в ADO.NET.


2. Какова последовательность создания типичной программы, использующей доступ к данным по
технологии ADO.NET?
3. Дайте характеристику объектам типа Connection.
4. Дайте характеристику объектам типа Command (OleDbCommand, SqlCommand, OdbcCommand).
5. Как с помощью средств ADO .NET выполнять параметризованные запросы (команды)?
6. Как с помощью средств ADO .NET выполнить хранимую процедуру и получить значение выходных
параметров процедуры?
7. Дайте характеристику объекту типа DataReader.
4
8. Дайте характеристику объекту типа DataAdapter и свойствам SelectCommand, UpdateCommand,
InsertCommand, DeleteCommand.
9. Для чего предназначен метод Fill класса DbDataAdapter (SqlDataAdapter, OleDbDataAdapter,
OdbcDataAdapter).
10. Для чего предназначен метод Update класса DbDataAdapter (SqlDataAdapter, OleDbDataAdapter,
OdbcDataAdapter).
11. Дайте характеристику объектам типа DataSet.
12. Дайте характеристику объектам типа DataTable, DataColumn, DataRelation, DataRow.
13. Дайте характеристику классам DbProviderFactories и DbProviderFactory.
14. Получение объекта фабрики для конкретного поставщика. Методы класса DbProviderFactory.
15. Принципы написания кода по работе с базами данных для произвольного поставщика.
16. Цикл работы с данными с использованием графического интерфейса Windows Forms.
Характеристика источников данных для элементов управления.
17. Общая характеристика основных элементов управления, позволяющих осуществлять связывание с
источниками данных. Простое и сложное связывание.
18. Дайте характеристику элементам управления Label и TextBox, их назначение и конфигурирование.
19. Дайте характеристику элементу управления Button. Как организовать обработку событий в форме?
20. Дайте характеристику элементу управления ComboBox и ListBox, их назначение и
конфигурирование.
21. Дайте характеристику элементу управления DataGridView, охарактеризуйте его назначение и
опишите процедуру его конфигурирования.
22. Класс Binding. Назначение, свойства, методы.
23. Класс BindingSource. Назначение, свойства, методы.
24. Организация фильтрации записей.
25. Вывод связных записей из двух источников данных.
26. Класс BindingNavigator.
27. Процедура создания простой Windows формы, предназначенной для работы с одной реляционной
таблицей базы данных.
28. Опишите процедуру создания Windows формы, предназначенной для работы с данными двух
таблиц.
29. Опишите последовательность действий по созданию простого приложения БД визуальными
средствами среды разработки.

6. ЛИТЕРАТУРА
1. Демонстрационный пример Windows-приложения для работы с данными одной таблицы базы данных
на GitHub: https://github.com/Olgasn/LabADO/tree/crud (версия для работы СУБД MS SQL Server),
2. Примеры на GitHub по работе с независимыми от поставщика объектами ADO.NET:
https://github.com/Olgasn/UsingDbProviderFactory.
3. Волосевич, А.А. Средства платформы .NET для работы с базами данных : метод. пособие по дисц.
«Инструменты и средства программирования» и «Избранные главы информатики» для студ. спец. 1-31
03 04 «Информатика» всех
форм обуч./ А. А. Волосевич, С. В. Актанорович. – Минск: БГУИР, 2011. – 52 с.
http://www.bsuir.by/m/12_100229_1_90182.pdf
4. Эспозито Д. Знакомство с Microsoft ASP.NET 2.0 - Москва; Санкт-Петербург: Русская редакция:
Питер, 2006. - 490 с. (есть электронный вариант).