Лабораторная работа Построение диаграммы декомпозиции первого уровня в нотации idef0 Цель работы
Скачать 8.2 Mb.
|
Лабораторная работа №12Работа с базой данных ИС средствами технологии ADO.NETЦель работы: Изучить назначение и основные способы создания объектов ADO.NET при помощи Visual Studio IDE. Изучить основные приемы и способы отображения и связывания, данных объекта DataSet и элементов управления Windows - формы. План проведения занятия
Порядок выполнения работы Задание 1. Информация о базе данных Разрабатываемое приложение предназначено для работы с базой данных сотрудников компании. На рис. 12.1 представлена структура базы данных. Рис. 12.1. Структура базы данных по сотрудникам компании
Таблица 12.2 Атрибуты таблицы Employee
Суррогатный ключ EmployeeID, как и все остальные суррогатные ключи базы данных, генерируется сервером базы данных автоматически, т.е. для него задано свойство IDENTITY для СУБД MS SQL Server или AutoNumber для MS Access. Атрибут JobRoleID является внешним ключом, с помощью которого осуществляется связь с табл. й JobTitle. Назначение атрибутов таблицы JobTitle приведено в табл. 12.3. Таблица 12.3 Атрибуты таблицы JobTitle
В рассматриваемом приложении в качестве СУБД используется MS SQL Server 2005.
Рис. 12.2. Окно AddConnection
Рис. 12.3. Окно Microsoft Data Link При нормальном соединении с базой данных можно открыть навигатор Server Explorer из меню View/ ServerExplorer или сочетанием клавиш ALT+CTRL+S (рисунок 12.4.). Рис. 12.4. Окно навигатора Server Explorer
Рис. 12.5. Добавление в проект нового компонента
Рис. 12.6. Выбор нового компонента – DataSet После нажатия кнопки Add система генерирует класс DataSetEmployee, который добавляется в решение проекта рис.12.7. Рис. 12.7. Окно решения проекта с новым компонентом DataSet
Рис. 12.8. Добавление таблиц к DataSet В результате будут созданы классы таблиц, адаптеры и методы Fill и GetData. При формировании класса DataSetEmployee необходимо учесть то, что первичные ключи таблиц Employee и JobTitle являются суррогатными и автоматически формируются (ключ со свойством автоинкремент) источником данных (например, MS SQL Server).
AutoIncrement = true; AutoIncrementSeed = -1; AutoIncrementStep = -1; Столбец со свойством AutoIncrement равным true генерирует последовательность значений, начинающуюся со значения AutoIncrementSeed и имеющую шаг AutoIncrementStep. Это позволяет генерировать уникальные значения целочисленного столбца первичного ключа. В этом случае при добавлении новой записи в таблицу будет генерироваться новое значение первичного ключа, начиная с -1, -2, -3 и т.д., которое никогда не совпадет с первичным ключом источника данных, т.к. в базе данных генерируются положительные первичные ключи. Свойства AutoIncrementSeed и AutoIncrementStep устанавливаются равными -1, чтобы гарантировать, что когда набор данных будет синхронизироваться с источником данных, эти значения не будут конфликтовать со значениями первичного ключа в источнике данных. При синхронизации DataSet с источником данных, когда добавляют новую строку в таблицу MS SQL Server 2005 с первичным автоинкрементным ключом, значение, которое этот ключ имел в таблице DataSet, заменяется значением, сгенерированным СУБД.
Рис. 12.9. Установка свойств для колонки EmployeeID
DataSetEmployee dsEmployee = new DataSetEmployee(); DataSetEmployeeTableAdapters.EmployeeTableAdapter daEmployee = new Project_К4И_01.DataSetEmployeeTableAdapters. EmployeeTableAdapter(); DataSetEmployeeTableAdapters.JobTitleTableAdapter daJobTitle = new Project_К4И_01.DataSetEmployeeTableAdapters. JobTitleTableAdapter();
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, возникающего при нажатии на пункт меню "Сотрудник". Задание 2.
this.listBoxEmployee.DataSource = this.dsEmployee1; this.listBoxEmployee.DisplayMember ="Employee.EmployeeSurname"; В разрабатываемом приложении на Windows-форме FormEmployee имеются четыре текстовых поля: textBoxSurname, textBoxName, textBoxPatronymic и textBoxNetName. Эти текстовые поля предназначены для отображения информации из одной записи таблицы Employee набора данных dsEmployee. Для того чтобы содержимое текстовых полей автоматически обновлялось при смене записи, их необходимо связать с соответствующими колонками набора данных dsEmployee. Связывание можно осуществить, используя свойство DataBindings элемента управления TextBox.
textBoxSurname.DataBindings.Add("Text", dsEmployee, "Employee.EmployeeSurname");
В таблице Employee значения для атрибута Access (доступ) задается в виде символьной строки, значение которой выбирается из списка элемента управления comboBoxAccess.
this.comboBoxAccess.Items.AddRange(new object[] {"не задан", "администратор","начальник смены", "старший оператор", "оператор", "аналитик"});
В таблице Employee значения для атрибута EmployeeStatus (статус) задается в виде целого числа (0, 1, 2, 3, 4, 6), однако статус сотрудника должен отображаться в элементе управления comboBoxStatus в виде строковых значений в соответствии со значениями его коллекции. В программе необходимо реализовать отображение целочисленных данных из DataSet в текстовые значения в элементе контроля comboBoxStatus. Для этого необходимо отслеживать изменение позиции в табл. источника данных dsEmployee и в соответствии со значением столбца EmployeeStatus активизировать требуемый элемент (Item) списка comboBoxStatus.
BindingManagerBase bmEmployee;
public FormEmployee( ) {InitializeComponent(); bmEmployee = this.BindingContext[dsEmployee1, "Employee"]; // Добавляем делегата PositionChanged для события - изменение //позиции в табл. Employee DataSet dsEmployee bmEmployee.PositionChanged = new EventHandler(BindingManagerBase_PositionChanged);}
private void BindingManagerBase_PositionChanged(object sender, EventArgs e) { int pos = ((BindingManagerBase)sender).Position; int sel = (int)dsEmployee.Employee[pos].EmployeeStatus; this.comboBoxStatus.Text = this.comboBoxStatus.Items[sel].ToString();}
Свойство DataBindings объекта ComboBox предоставляет доступ к коллекции ControlBindingsCollection. Метод Add этой коллекции добавляет в неё привязку. Перегруженный вариант метода Add принимает три аргумента: PropertyName - имя свойства элемента управления, к которому осуществляется привязка; DataSource - имя привязываемого источника данных; DataMember - имя свойства привязываемого источника данных.
comboBoxJobRole.DataSource = this.dsEmployee.JobTitle; comboBoxJobRole.DisplayMember = "JobRoleName"; comboBoxJobRole.ValueMember = "JobRoleID";
comboBoxJobRole.DataBindings.Add("SelectedValue", dsEmployee,"Employee.JobRoleID"); После компиляции и запуска приложения экранная форма будет иметь вид, приведенный на рис. 12.10. . Рис. 12.10. Экранная форма в режиме просмотра (только для чтения) Содержание отчета
|