Опубликован: 09.09.2008 | Доступ: свободный | Студентов: 2107 / 346 | Оценка: 4.30 / 4.12 | Длительность: 08:30:00
ISBN: 978-5-94774-601-3
Самостоятельная работа 8:

Подготовка ADO.NET к работе в приложении

Информация о базе данных

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

Структура базы данных по сотрудникам компании

Рис. 8.4. Структура базы данных по сотрудникам компании

База данных включает две таблицы:

  • сведения о сотрудниках - Employee ;
  • справочник должностей - JobTitle.

Назначение атрибутов таблицы Employee приведены в таблице 8.4

Таблица 8.4. Атрибуты таблицы Employee
Имя атрибута Назначение Тип
EmployeeID Суррогатный ключ smallint
JobRoleID Внешний ключ smallint
EmployeeSurname Фамилия varchar(50)
EmployeeName Имя varchar(20)
EmployeePatronymic Отчество varchar(20)
EmployeeStatus Статус int
Access Уровень доступа varchar(20)
NetName Сетевое имя varchar(20)
Birthday Дата рождения Smalldatetime
FirstDate Дата приема на работу smalldatetime

Суррогатный ключ EmployeeID, как и все остальные суррогатные ключи базы данных, генерируется сервером базы данных автоматически, т.е. для него задано свойство IDENTITY для СУБД MS SQL Server или AutoNumber для MS Access. Атрибут JobRoleID является внешним ключом, с помощью которого осуществляется связь с таблицей JobTitle.

Назначение атрибутов таблицы JobTitle приведено в таблице 8.3.

Таблица 8.3. Атрибуты таблицы JobTitle
Имя атрибута Назначение Тип
JobRoleID Суррогатный ключ smallint
JobRoleName Наименование должности varchar(50)

В рассматриваемом приложении в качестве СУБД используется MS SQL Server 2005. Создаем соединение проекта с базой данных. Для этого выбираем пункт меню Tools/Connect to Database. Появляется окно AddConnection (рисунок 8.5)

Окно AddConnection

Рис. 8.5. Окно AddConnection

В пункте "Server name" задаем имя сервера, которое необходимо узнать у преподавателя (на рисунке 8.5 MYHOME-8834E210\DOLJENKO ). В пункте Select or enter database name - имя базы данных, которое определит преподаватель (на рисунке 8.5 - Employee ).

Для проверки правильности подключения к базе данных нажимаем клавишу "Test Connection". При правильном подключении появляется следующее сообщение (рисунок 8.6).

Окно Microsoft Data Link

Рис. 8.6. Окно Microsoft Data Link

При нормальном соединении с базой данных можно открыть навигатор Server Explorer из меню View/ Server Explorer или сочетанием клавиш ALT+CTRL+S (рисунок 8.7).

Окно навигатора Server Explorer

Рис. 8.7. Окно навигатора Server Explorer

Добавим в проект объект класса DataSet. Для этого выберем пункт меню Project/Add New Item. . . (рисунок 8.8).

Добавление в проект нового компонента

Рис. 8.8. Добавление в проект нового компонента

В окне Add New Item (рисунок 8.9) выберем шаблон DataSet и присвоим ему имя DataSetEmployee.

Выбор нового компонента - DataSet

увеличить изображение
Рис. 8.9. Выбор нового компонента - DataSet

После нажатия кнопки Add система генерирует класс DataSetEmployee, который добавляется в решение проекта (рисунок 8.10).

Окно решения проекта с новым компонентом DataSet

Рис. 8.10. Окно решения проекта с новым компонентом DataSet

Для добавления таблиц Employee и JobTitle к DataSet необходимо перетащить их из окна Server Explorer на поле графического дизайнера (рисунок 8.11).

Добавление таблиц к DataSet

увеличить изображение
Рис. 8.11. Добавление таблиц к DataSet

В результате будут созданы классы таблиц, адаптеры и методы Fill и GetData.

При формировании класса DataSetEmployee необходимо учесть то, что первичные ключи таблиц Employee и JobTitle являются суррогатными и автоматически формируются (ключ со свойством автоинкремент) источником данных (например, MS SQL Server ). При формировании новых записей в приложении необходимо обеспечить уникальность первичных ключей для таблиц объекта DataSetEmployee. Это можно обеспечить, задав для ключевых колонок таблиц Employee и JobTitle следующие свойства:

AutoIncrement = true;
AutoIncrementSeed = -1;
AutoIncrementStep = -1;

Столбец со свойством AutoIncrement равным true генерирует последовательность значений, начинающуюся со значения AutoIncrementSeed и имеющую шаг AutoIncrementStep. Это позволяет генерировать уникальные значения целочисленного столбца первичного ключа. В этом случае при добавлении новой записи в таблицу будет генерироваться новое значение первичного ключа, начиная с -1, -2, -3 и т.д., которое никогда не совпадет с первичным ключом источника данных, т.к. в базе данных генерируются положительные первичные ключи. Свойства AutoIncrementSeed и AutoIncrementStep устанавливаются равными -1, чтобы гарантировать, что когда набор данных будет синхронизироваться с источником данных, эти значения не будут конфликтовать со значениями первичного ключа в источнике данных. При синхронизации DataSet с источником данных, когда добавляют новую строку в таблицу MS SQL Server 2005 с первичным автоинкрементным ключом, значение, которое этот ключ имел в таблице DataSet, заменяется значением, сгенерированным СУБД.

Установка свойств AutoIncrement, AutoIncrementSeed и AutoIncrementStep для колонки первичного ключа EmployeeID таблицы Employee приведена на рисунке 8.12.

Установка свойств для колонки EmployeeID

Рис. 8.12. Установка свойств для колонки EmployeeID

Аналогичные установки свойств AutoIncrement, AutoIncrementSeed и AutoIncrementStep необходимо сделать и для колонки JobTitleID таблицы JobTitle.

После создания класса DataSetEmployee и адаптера необходимо создать объекты этих классов, добавив следующий код к файлу FormEmployee.cs.

DataSetEmployee dsEmployee = new DataSetEmployee();
DataSetEmployeeTableAdapters.EmployeeTableAdapter daEmployee =
   new Project_К4И_01.DataSetEmployeeTableAdapters.
EmployeeTableAdapter();
DataSetEmployeeTableAdapters.JobTitleTableAdapter daJobTitle =
  new Project_К4И_01.DataSetEmployeeTableAdapters.
JobTitleTableAdapter();

После того, как созданы объекты адаптеров данных daEmployee и daJobTitle, а также объект класса DataSetEmployee - dsEmployee необходимо создать метод для заполнения объекта dsEmployee из базы данных (в рассматриваемом примере база данных Employee, созданная в СУБД MS SQL Server 2005 ). Для заполнения данными dsEmployee из базы данных Employee создадим метод EmployeeFill( ):

public void EmployeeFill()
{   daJobTitle.Fill(dsEmployee.JobTitle);
    daEmployee.Fill(dsEmployee.Employee);
    MessageBox.Show("Метод Fill отработал");}

В методе EmployeeFill( ) для объектов класса DataAdapter применяется метод Fill, который производит заполнение таблиц ( JobTitle и Employee ) объекта dsEmployee данными из базы данных. Метод Fill адаптера данных DataAdapter требует указания в качестве параметров задания соответствующей таблицы DataSet, то есть dsEmployee.JobTitle и dsEmployee.Employee.

Метод MessageBox.Show введен в метод EmployeeFill для первоначального тестирования, после которого его нужно убрать.

Вызов метода EmployeeFill необходимо добавить в обработчик события Load для формы FormEmployee, возникающего при нажатии на пункт меню "Сотрудник".

Задание на лабораторную работу

  1. Изучите теоретический материал.
  2. Создайте класс DataSetEmployee.
  3. Для разрабатываемого приложения создайте объекты dsEmployee, daJobTitle и daEmployee.
  4. Проведите компиляцию проекта и убедитесь в отсутствии ошибок трансляции.
  5. Разработайте метод Fill для заполнение таблиц DataSet.
  6. Протестировать работу приложения.
Анна Иваненко
Анна Иваненко

В самостоятельной работе 8 написано: "В пункте "Server name" задаем имя сервера, которое необходимо узнать у преподавателя". Где узнать это имя?

Вячеслав Шестивский
Вячеслав Шестивский

Вроде всё выставил верно, но при клике на "Сотрудники", меню из FormEmplyee не вставляется в меню главного окна а висит в дочернем окне снизу.  Как поправить?