Главная страница
Навигация по странице:

  • План проведения занятия

  • Порядок выполнения работы Задание 1. Информация о базе данных

  • Содержание отчета

  • Лабораторная работа Построение диаграммы декомпозиции первого уровня в нотации idef0 Цель работы


    Скачать 8.2 Mb.
    НазваниеЛабораторная работа Построение диаграммы декомпозиции первого уровня в нотации idef0 Цель работы
    АнкорLaboratornye_raboty_ProektirovanieIS.doc
    Дата12.12.2017
    Размер8.2 Mb.
    Формат файлаdoc
    Имя файлаLaboratornye_raboty_ProektirovanieIS.doc
    ТипЛабораторная работа
    #10898
    страница8 из 10
    1   2   3   4   5   6   7   8   9   10

    Лабораторная работа №12

    Работа с базой данных ИС средствами технологии ADO.NET


    Цель работы: Изучить назначение и основные способы создания объектов ADO.NET при помощи Visual Studio IDE. Изучить основные приемы и способы отображения и связывания, данных объекта DataSet и элементов управления Windows - формы.

    План проведения занятия

    1. Изучить теоретический материал.

    2. Создать класс DataSetEmployee и объекты dsEmployee, daJobTitle и daEmployee.

    3. Разработать метод Fill для заполнения таблиц DataSet.

    4. Осуществить привязку источника данных к элементам управления экранной формы.

    5. Разработать необходимые методы для вывода информации из базы данных на экранную форму.

    6. Протестировать программу.

    Порядок выполнения работы

    Задание 1.

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

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



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

    1. Создайте базу данных, включающую две таблицы:

    • сведения о сотрудниках - Employee;

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

    1. Задайте значение атрибутам таблицы Employee приведенным в табл. 12.2

    Таблица 12.2

    Атрибуты таблицы 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 приведено в табл. 12.3.

    Таблица 12.3

    Атрибуты таблицы JobTitle

    Имя атрибута

    Назначение

    Тип

    JobRoleID

    Суррогатный ключ

    smallint

    JobRoleName

    Наименование должности

    varchar(50)

    В рассматриваемом приложении в качестве СУБД используется MS SQL Server 2005.

    1. Создайте соединение проекта с базой данных. Для этого выберите пункт меню Tools/ConnecttoDatabase. Появляется окно AddConnection рис.12.2.



    Рис. 12.2. Окно AddConnection

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

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



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

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



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

    1. Добавьте в проект объект класса DataSet. Для этого выберем пункт меню Project/AddNewItem . . . (рис. 12.5).



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

    1. Выберете шаблон DataSet в окне Add New Item рис 12.6 и присвойте ему имя DataSetEmployee.



    Рис. 12.6. Выбор нового компонента – DataSet

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



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

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



    Рис. 12.8. Добавление таблиц к DataSet

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

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

    1. При формировании новых записей в приложении необходимо обеспечить уникальность первичных ключей для таблиц объекта 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, заменяется значением, сгенерированным СУБД.

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



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

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

    2. После создания класса 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();

    1. Создайте метод для заполнения объекта dsEmployee из базы данных , после того, как созданы объекты адаптеров данных daEmployee и daJobTitle, а также объект класса DataSetEmployee - 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, возникающего при нажатии на пункт меню "Сотрудник".

    Задание 2.

    1. Свяжите элемент контроля listBoxEmployee, в котором должен отображаться список фамилий сотрудников, со столбцом EmployeeSurname таблицы Employee. Это можно сделать, добавив следующие строки кода в метод загрузки формы FormEmployee_Load.

    this.listBoxEmployee.DataSource = this.dsEmployee1;

    this.listBoxEmployee.DisplayMember ="Employee.EmployeeSurname";

    В разрабатываемом приложении на Windows-форме FormEmployee имеются четыре текстовых поля: textBoxSurname, textBoxName, textBoxPatronymic и textBoxNetName. Эти текстовые поля предназначены для отображения информации из одной записи таблицы Employee набора данных dsEmployee. Для того чтобы содержимое текстовых полей автоматически обновлялось при смене записи, их необходимо связать с соответствующими колонками набора данных dsEmployee. Связывание можно осуществить, используя свойство DataBindings элемента управления TextBox.

    1. Создайте связь для элемента управления textBoxSurname с источником данных, добавив следующую строку кода в метод загрузки формы FormEmployee_Load.

    textBoxSurname.DataBindings.Add("Text", dsEmployee,

    "Employee.EmployeeSurname");

    1. Протестируйте добавленный в программу код.

    2. Аналогично свяжите текстовые поля textBoxName, textBoxPatronymic и textBoxNetName с источником данных.

    В таблице Employee значения для атрибута Access (доступ) задается в виде символьной строки, значение которой выбирается из списка элемента управления comboBoxAccess.

    1. Задайте коллекцию выпадающего списка элемента управления comboBoxAccess можно задать следующей строкой кода:

    this.comboBoxAccess.Items.AddRange(new object[] {"не задан", "администратор","начальник смены", "старший оператор", "оператор", "аналитик"});

    1. Для заданной записи источника данных (таблица Employee) значение столбца Access отобразите в элементе контроля comboBoxAccess. Сделайте это аналогично тому, как это делалось для элементов управления TextBox, задавая свойство DataBindings

    2. Сформируйте коллекцию выпадающего списка: не задан, активен, выходной, в отпуске, болеет, не работает, помечен как удаленный. Для элемента управления comboBoxStatus

    В таблице Employee значения для атрибута EmployeeStatus (статус) задается в виде целого числа (0, 1, 2, 3, 4, 6), однако статус сотрудника должен отображаться в элементе управления comboBoxStatus в виде строковых значений в соответствии со значениями его коллекции. В программе необходимо реализовать отображение целочисленных данных из DataSet в текстовые значения в элементе контроля comboBoxStatus. Для этого необходимо отслеживать изменение позиции в табл. источника данных dsEmployee и в соответствии со значением столбца EmployeeStatus активизировать требуемый элемент (Item) списка comboBoxStatus.

    1. Объявите объект bmEmployee класса BindingManagerBase в форме ormEmployee:

    BindingManagerBase bmEmployee;

    1. Создайте объект bmEmployee в конструкторе класса FormEmployee, применяя индексатор контента BindingContext включив в него связывание с таблицей Employee, и добавьте делегат для события, которое формируется при изменении позиции в данной таблице:

    public FormEmployee( )

    {InitializeComponent();

    bmEmployee = this.BindingContext[dsEmployee1, "Employee"];

    // Добавляем делегата PositionChanged для события - изменение

    //позиции в табл. Employee DataSet dsEmployee

    bmEmployee.PositionChanged = new EventHandler(BindingManagerBase_PositionChanged);}

    1. Создайте обработчик для сформированного события, который на основе выбранной строки (pos) таблицы Employee будет задавать свойству Text списка comboBoxStatus значение из коллекции Items по индексу (sel), полученному из столбца EmployeeStatus Employee.

    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();}

    1. Протестируйте добавленный в программу код.

    2. Для задания в элементе контроля comboBoxJobRole должности сотрудника необходимо получить данные из родительской таблицы JobTitle, с которой таблица Employee связана внешним ключом JobRoleID. Фактически необходимо осуществить вывод данных из справочника (таблица JobTitle) по данным в основной табл. Employee.

    Свойство DataBindings объекта ComboBox предоставляет доступ к коллекции ControlBindingsCollection. Метод Add этой коллекции добавляет в неё привязку.

    Перегруженный вариант метода Add принимает три аргумента:

    PropertyName - имя свойства элемента управления, к которому осуществляется привязка;

    DataSource - имя привязываемого источника данных;

    DataMember - имя свойства привязываемого источника данных.

    1. Свяжите элемент контроля comboBoxJobRole с набором данных JobTitle (родительская таблица - справочник), в соответствии с кодом, приведенным ниже.

    comboBoxJobRole.DataSource = this.dsEmployee.JobTitle;

    comboBoxJobRole.DisplayMember = "JobRoleName";

    comboBoxJobRole.ValueMember = "JobRoleID";

    1. Свяжите comboBoxJobRole с полем JobRoleID основной таблицы Employee (дочерняя таблица), в соответствии со следующим кодом

    comboBoxJobRole.DataBindings.Add("SelectedValue", dsEmployee,"Employee.JobRoleID");

    После компиляции и запуска приложения экранная форма будет иметь вид, приведенный на рис. 12.10.

    .

    Рис. 12.10. Экранная форма в режиме просмотра (только для чтения)

    Содержание отчета

    1. Описание процесса создание класса DataSetEmployee , объектов dsEmployee, daJobTitle и daEmployee, метода Fill.

    2. Описание создания базы данных, включающей две таблицы и соединение проекта с базой данных, формирование новых записей в приложении.

    3. Создание метода для заполнения объекта dsEmployee из базы данных.

    4. Описание процесса связывания элемента контроля listBoxEmployee, в котором должен отображаться список фамилий сотрудников, со столбцом EmployeeSurname таблицы Employee.

    5. Выводы по проделанной работе
    1   2   3   4   5   6   7   8   9   10


    написать администратору сайта