4. Порядок выполнения работы
А. Создание и заполнение базы данных
1. Запустить Microsoft SQL Server:
Пуск | Программы | Microsoft SQL Server 2005 | Среда SQL Server Management Studio
Express ► ф. Соединение с сервером | Имя сервера ← выбр. <Обзор дальше…> ►
ф. Выбор серверов | Выберите сервер для соединения: | раскр. Компонент Database
Engine | выр. Имя_сервера \ SQLEXPRESS | кн. OK ►
ф. Соединение с сервером | Проверка подлинности: ← выбр. Проверка подлинности
Windows; кн. Соединить
2. Создать новую базу данных
ф. Среда SQL Server Management Studio Express | ф. Обозреватель объектов;
раскр. [+] Имя сервера\SQLEXPRESS (SQL Server 9.0 – …) |
раскр. [+] Базы данных; прав. кн. мыши на Базы данных | Создать базу данных… ►
(ф. Создание базы данных | Имя базы данных ← Education; кн. OK) ►
ф. Обозреватель объектов | раскр [+] Education
(если база данных не появилась, то пр. кн. мыши на Базы данных ← выбр. Обновить)
3. В базе данных с помощью конструктора таблиц создать структуру таблицы Students (справочник студентов):
– создать таблицу Students
ф. Среда SQL Server Management Studio Express | ф. Обозреватель объектов |
Базы данных | Education | пр. кн. мыши на Таблицы | Создать таблицу… ►
(ф. Таблица – dbo.Table_1 | (ф. Свойства | Имя ← Students);
– задать поле идентификатора студента (счетчик, первичный ключ):
ф. Таблица – dbo.Table_1 |
Имя столбца ← stud_ID; Тип данных ← int; снять Разрешить значения null;
ф. Свойства столбцов | раскр. Спецификация идентифицирующего столбца |
(Является идентифицирующим столбцом) ← Да; Начальное значение ← 1;
Приращение ← 1; (Панель инструментов | кн. Задать первичный ключ ►
метка ключа в начале строки).
– задать поле номера зачетной книжки (уникальное, 6 цифр):
Имя столбца ← no_zk; Тип данных ← char(10), изменить 10 на 6;
снять Разрешить значения null;
Панель инструментов | кн. Управление индексами и ключами ►
ф. Индексы и ключи | кн. Добавить ►новый элемент IX_Students*
ф. Изменение свойств нового уникального ключа |
Общие | Столбцы | кн. […] ► ф. Столбцы индекса | Имя столбца ← выбр. no_zk; кн. OK;
Общие | Является уникальным ← выбр. Да;
Идентификация | (Имя) ← Unique_no_zk; кн. Закрыть.
– задать поля фамилии, имени, отчества (строковые):
Имя столбца ← fam; Тип данных ← varchar(50), изменить 50 на 20;
снять Разрешить значения null;
аналогично – для имени (im) и отчества (ot);
– создать уникальный индекс ФИО (Unique_fio) из полей фамилия (fam), имя (im), отч (ot):
Панель инструментов | кн. Управление индексами и ключами ►
ф. Индексы и ключи | кн. Добавить ►новый элемент IX_Students*
ф. Изменение свойств нового уникального ключа |
Общие | Столбцы | кн. […] ► ф. Столбцы индекса |
Имя столбца ← выбр. fam; след. строка | Имя столбца ← выбр. im;
след. строка | Имя столбца ← выбр. ot; кн. OK;
Общие | Является уникальным ← выбр. Да;
Идентификация | (Имя) ← Unique_fio; кн. Закрыть.
– задать поле кода специальности spec (до 7 русских букв):
Имя столбца ← spec; Тип данных ← varchar(50), изменить 50 на 7;
снять Разрешить значения null;
Панель инструментов | кн. Управление проверочными ограничениями ►
ф. Проверочные ограничения | кн. Добавить ►новый элемент CK_Students*
ф. Изменение свойств нового проверочного ограничения… |
Общие | Выражение ← spec >= 'А' AND spec <= 'я';
Идентификация | (Имя) ← Russian_spec; кн. Закрыть.
– задать поле курса kurs (одна цифра от 1 до 6):
Имя столбца ← kurs; Тип данных ← varchar(50), изменить 50 на 1;
снять Разрешить значения null;
Панель инструментов | кн. Управление проверочными ограничениями ►
ф. Проверочные ограничения | кн. Добавить ►новый элемент CK_Students*
ф. Изменение свойств нового проверочного ограничения… |
Общие | Выражение ← kurs >= 1 AND kurs <= 6;
Идентификация | (Имя) ← Kurs_from_1_to_6; кн. Закрыть.
– задать поле номера группы gr (две цифры):
Имя столбца ← gr; Тип данных ← varchar(50), изменить 50 на 2;
снять Разрешить значения null;
Панель инструментов | кн. Управление проверочными ограничениями ►
ф. Проверочные ограничения | кн. Добавить ►новый элемент CK_Students*
ф. Изменение свойств нового проверочного ограничения… |
Общие | Выражение ← gr >='01' AND gr <= '99';
Идентификация | (Имя) ← Gr_from_01_to_99; кн. Закрыть.
– задать поле даты рождения data_r:
Имя столбца ← data_r; Тип данных ← datetime; не снимать Разрешить значения null.
– задать поле биографии biogr (мемо):
Имя столбца ← biogr; Тип данных ← text; не снимать Разрешить значения null;
– сохранить структуру таблицы одним из трех способов: сочетанием клавиш [Ctrl + S], кн. Файл | Сохранить или кн. «Сохранить» на панели инструментов.
4. Аналогичным образом создать структуру таблицы Subjects (справочник предметов):
– создать новую таблицу базы данных Education
ф. Среда SQL Server Management Studio Express | ф. Обозреватель объектов |
Базы данных | Education | пр. кн. мыши на Таблицы | Создать таблицу… ►
(ф. Таблица – dbo.Table_1
– задать имя таблицы Subjects:
ф. Свойства | Имя ← Subjects
– сохранить таблицу Subjects;
– задать поле идентификатора предмета predm_ID (счетчик, первичный ключ).
ф. Таблица – dbo.Table_1 |
Имя столбца ← predm_ID; Тип данных ← int; снять Разрешить значения null;
ф. Свойства столбцов | раскр. Спецификация идентифицирующего столбца |
(Является идентифицирующим столбцом) ← Да; Начальное значение ← 1;
Приращение ← 1; (Панель инструментов | кн. Задать первичный ключ ►
метка ключа в начале строки).
– аналогичным образом создать остальные поля таблицы:
– Название name (название предмета (строковое));
– Цикл cycle(цикл дисциплин, к которым относится предмет (строковое));
– Объем hrs (количество часов (числовое));
– Кафедра dept(название кафедры, на которой ведется преподавание предмета (строковое)).
– указать первичный ключ таблицы (поле predm_ID);
– для каждого из полей таблицы придумать ограничения на значения.
5. Аналогичным образом создать структуру таблицы Успеваемость (успеваемость студентов по предметам) – Uspev с полями:
– Student (идентификатор студента (тип такой же, как в таблицеСтуденты, но не счетчик));
– Predmet(идентификатор предмета (тип такой же, как в таблицеПредметы, но не счетчик));
– Ocenka(оценка (символ));
– Data (дата (дата)).
– ввести составной первичный ключ (поля идентификаторов студента и предмета):
ф. конструктора таблицы Uspev| кл. на полеStudent;
Ctrl + кл. на поле Predmet ►
выделены оба поля; (панель инстр. | кн. Ключевое поле) ► составной ключ готов;
– для каждого из полей таблицы придумать ограничения на значения.
6. Указать пользователя NT AUTHORITY\SYSTEM в качестве владельца базы данных Education
ф. Среда SQL Server Management Studio Express | ф. Обозреватель объектов | Базы данных | пр. кн. мыши на Education | Свойства ► ф. Свойства базы данных - Education |
Выбор страницы ← Файлы; Владелец ← кн. […]►
ф. Выбор владельца базы данных | кн. Обзор… ►
ф. Поиск объектов | уст. [NT AUTHORITY\SYSTEM] | кн. OK ►
ф. Выбор владельца базы данных | кн. OK►
ф. Свойства базы данных - Education | кн. OK.
7. Связать таблицы, сделав таблицы студентов и предметов родительскими, а таблицу успеваемости – дочерней; установить правила ссылочной целостности: каскадное для удаления и изменения:
ф. Среда SQL Server Management Studio Express | ф. Обозреватель объектов | Базы данных
| Education | раскр. Диаграммы баз данных ►ф. Microsoft SQL Server Management Studio |
кн. Yes; пр. кн. мыши на Диаграммы баз данных | Создать диаграмму баз данных►
ф. Добавление таблицы | выбр. Students ← кн. Добавить; выбр. Subjects ← кн. Добавить;
выбр. Uspev ← кн. Добавить; кн. Закрыть ►ф. Диаграмма – Имя сервера.Diagram_0*
(Students | ключ) перетащить на (Uspev) ► (ф. Таблицы и столбцы |
проверить соединяемые поля; кн. OK) ►ф. Отношение внешнего ключа |
Общие | раскр. Конструктор баз данных | Спецификация INSERT и UPDATE;
Обновить правило ← Каскадом; Удалить правило ← Каскадом; кн. OK;
Аналогичным образом установить связь между таблицами Subjects и Uspev и сохранить диаграмму.
8. Наполнить базу данных сведениями о студентах (не менее 5), предметах (не менее 3) и оценках (не менее 10). Освоить доступ к дочерним записям из родительской таблицы. Проверить работоспособность полей и таблиц подстановок. Освоить приемы изменения и удаления полей и записей. Проверить работоспособность ограничений значений полей, уникальности и др., предусмотренные при задании структуры базы данных. Проверить работоспособность ссылочной целостности, удаляя, изменяя и вставляя данные.
Б. Представления, хранимые процедуры, триггеры
1. Создать просмотр для вывода кратких сведений о студентах (идентификатор, номер зачетки, фамилия и инициалы, идентификатор группы):
– создать представление Students_info:
ф. Среда SQL Server Management Studio Express | ф. Обозреватель объектов | Базы данных
| Education | пр. кн. мыши на Представления | Создать представление… ►
ф. Добавление таблицы | выбр. Students; кн. Добавить; кн. Закрыть;
ф. Представление – dbo.View_1*
(1-я стр. | Столбец ← stud_ID); (2-я стр. | Столбец ←no_zk);
(3-я стр. | Столбец ← RTRIM(fam) + ' ' + SUBSTRING(im; 1; 1) + '.' + SUBSTRING(ot; 1; 1) + '.'; Псевдоним ←fio);
(4-я стр. | Столбец ← RTRIM(spec) + '-' + kurs + gr; Псевдоним ←gruppa);
кл. [Ctrl + S] ►ф. Выбор имени | Введите имя представления ← Students_info.
– проверить работоспособность представления:
ф. Среда SQL Server Management Studio Express | ф. Обозреватель объектов | Базы данных
| Education | Представления | пр. кн. Students_info |
Открыть представление ► результаты на экране.
2. Аналогичным образом создать представление для вывода сведений об успеваемости студентов из таблицы успеваемости с указанием сведений о студенте из запроса Students_infoи сведений о предмете из таблицы предметов. Результат должен содержать следующие поля: ФИО студента, Группа, Предмет, Дата, Оценка. Назвать представление какStudents_uspev.
3. Создать хранимую процедуру для вывода кратких сведений о студенте (идентификатор, фамилия и инициалы, идентификатор группы) по номеру его зачетной книжки:
– создать хранимую процедуру GetStudentInfo
ф. Среда SQL Server Management Studio Express | ф. Обозреватель объектов |
Базы данных | Education | Программирование | пр. кн. мыши на Хранимые процедуры |
Создать хранимую процедуру…► ф. Имя сервера.Education – SQLQuery1.sql |
Панель инструментов | кн. Указать значения для параметров шаблона ►
ф. Задание значений для параметров шаблона | Параметр Author;
Значение ← Номер группы; Параметр Create Date; Значение ← Текущая дата;
Параметр Author; Значение ← Номер группы; Параметр Description; Значение ← Краткие
сведения о студенте; Параметр Procedure_Name; Значение ← GetStudentInfo;
Параметр @Param1; Значение ← @zk; Параметр Datatype_For_Param1;
Значение ← char(6); кн. OK;
– ввести программный код
ф. Имя сервера.Education – SQLQuery1.sql | удалить строки , @p2 int = 0;
вместо строки SELECT @zk, @p2 ввести код:
SELECT stud_ID, RTRIM(fam) + ' ' + SUBSTRING(im, 1, 1) + '.' + SUBSTRING(ot, 1, 1)
+ '.' AS fio, RTRIM(spec) + '-' + kurs + gr AS gruppa
FROM dbo.Students
WHERE no_zk = @zk
– сохранить хранимую процедуру под именем GetStudentInfo.sql.
– привязать хранимую процедуру к базе данных
Панель инструментов | кн. Выполнить
– проверить работоспособность хранимой процедуры:
ф. Среда SQL Server Management Studio Express | ф. Обозреватель объектов |
Базы данных | Education | Программирование | Хранимые процедуры | пр. кн. мыши
на GetStudentInfo | Выбрать хранимую процедуру… | ф. Выполнение процедуры… |
Параметр @zk; Значение ← ввести любое значение номера зачетной книжки;
кн. OK ►результаты на экране.
4. Создать триггер, проверяющий, что каждый студент может сдавать не более двух предметов в один день.
– создать новый триггер CheckExams для таблицы успеваемости
ф. Среда SQL Server Management Studio Express | ф. Обозреватель объектов |
Базы данных | Education | Таблицы | раскр. Uspev | пр. кн. Триггеры | Создать триггер… ►
ф. Имя сервера.Education – SQLQuery1.sql
Панель инструментов | кн. Указать значения для параметров шаблона ►
ф. Задание значений для параметров шаблона | Параметр Trigger_Name;
Значение ← CheckExams; кн. OK;
– удалить фрагмент
CREATE TRIGGER <Schema_Name, sysname, Schema_Name>.<Trigger_Name, sysname, Trigger_Name>
ON <Schema_Name, sysname, Schema_Name>.<Table_Name, sysname, Table_Name>
AFTER <Data_Modification_Statements, , INSERT,DELETE,UPDATE>
AS
BEGIN
-- SET NOCOUNT ON added to prevent extra result sets from
-- interfering with SELECT statements.
SET NOCOUNT ON;
-- Insert statements for trigger here
END
– ввести программный код триггера
CREATE TRIGGER CheckExams
ON Uspev FOR INSERT, UPDATE
AS
DECLARE
@stud INT,
@date DATETIME,
@count INT
BEGIN TRANSACTION
SELECT @stud=Student,@date=Data FROM INSERTED
SELECT @count = count(*)
FROM Uspev WHERE Student=@stud and Data=@date
IF(@count < 3)
BEGIN COMMIT TRANSACTION END
ELSE
BEGIN
RAISERROR(Студент может сдавать не более двух предметов в день',16,1)
ROLLBACK TRANSACTION
END
– сохранить триггер под именем CheckExams.sql.
– привязать триггер к базе данных
Панель инструментов | кн. Выполнить
– проверить работоспособность хранимой процедуры:
ф. Среда SQL Server Management Studio Express | ф. Обозреватель объектов |
Базы данных | Education | Таблицы | пр. кн. мыши на Uspev | ввести вторую запись
по студенту, сдающему второй предмет в один и тот же день; сделать попытку
перейти на следующую строку ►сообщение об ошибке с текстом из триггера.
В. .NET C# и Microsoft SQL Server
1. Запустить среду программирования MicrosoftVisualC#:
Пуск | Программы | Microsoft Visual C# 2008 Express Edition |
2. Создать новый проект и сохранить его под именем Education:
File | New Project ►ф. New Project | Visual Studio installed templates |
выбр. Windows Forms Application; Name ← Education; кн. OK.
3. Выбрать расположение файлов проекта:
ф. Form1.cs [Design] | кл. [Ctrl + S] ► ф. Save Project |
Location ← выбрать директорию, в которой будут размещены файлы проекта.
4. Найти набор компонентов для работы с базами данных на панели инструментов:
ф. Toolbox | найти элементы SQLConnection; SQLDataAdapter; SQLDataSource.
Если элементы не найдены, то добавить их:
пр. кн. мыши на панели инструментов Toolbox | выбр. Choose Items… ►
ф. Choose Toolbox Items… | вкл. .NET Framework Components | Filter ← SQL |
уст. SQLConnection; SQLDataAdapter; SQLDataSource; кн. OK. ►
найти на ф. Toolbox добавленные элементы.
5. Выбрать компонент OleDbConnection для установления соединения с базой данных:
Toolbox|Data|SQLConnection►выдел. лев. кн. мыши
и перетащить на форму ► на форме появится компонент с именем OleDbConnection1
6. Установить параметры соединения:
Выделить SQLConnection| ф.Properties| выбр.Connection String |
выбр. <New Connection…> ►ф. Add Connection | кн. Browse | ф. Select SQL Server Database File | выбр. файл Education.mdf, размещенный в директории C:\Program Files\Microsoft SQL Server\MSSQL.2\MSSQL\Data; кн. TestConnection► если появилось сообщение «Testconnectionsucceeded», то соединение установлено успешно; иначе перезагрузить компьютер и попробовать снова, не загружая при этомSQLServer; кн.OK.
7. Переименовать компонент соединения:
Выделить SQLConnection1 | ф. Properties | выбр. Name←Conn
8. Установить компонент SQLDataAdapterдля извлечения информации из базы данных:
Toolbox|Data|SQLDataAdapter►выдел. лев. кн. мыши и перетащить на форму ►
на форме появится компонент с именем SQLDataAdapter1
9. Настроить компонент SQLDataAdapter1:
ф. DataAdapter Configuration Wizard | ф. Choose Your Data Connection |
выбр. Education.mdf; кн. Next ►ф. Choose a Command Type | уст. Use SQL Statements;
кн. Next ►ф. Generate the SQL Statements | кн. Query Builder… ►
ф. Add Table | вкл. Views | выбр. Students_info; кн. Add; кн. Close ►
ф. Query Builder | табл. Students_info | уст. * (All Columns); кн. OK ►
ф. Generate the SQL Statements | кн. Next ► ф. Wizard Results | кн. Finish.
10. Переименовать компонент SQLDataAdapter1:
Выделить SQLDataAdapter1 | ф. Properties | выбр. Name←DataAdapter
11. Установить компонент SQLDataSetдля создания кэшированной копии базы данных в памяти:
Выделить DataAdapter| пр. кн. мыши | выбр.Generate Dataset | выбр. New ← DS |
кн. OK► на форме появится компонент с именемDS1
12. Заполнить компонент DataSetданными при загрузке приложения:
Выделить форму | ф. Properties| кн.Events| выбр.Load| дв. кл. лев. кн. мыши ►
ф. Form1.cs| в установленной позиции курсора ввести строкуDataAdapter.Fill(ds1);► перекл. на вкл.Form1.cs[Design]
13. Установить компонент DataGridViewдля отображения данных на форме:
Toolbox|Data|DataGridView►выдел. лев. кн. мыши и перетащить на форму ►
на форме появится серое прямоугольное поле (элемент dataGridView1); растянуть компонент по размерам формы
14. Переименовать компонент dataGridView1:
Выделить dataGridView1 | ф. Properties | выбр. Name←Grid.
15. Заполнить таблицу Grid:
Выделить Grid | ф. Properties | DataSource | Other Data Sources | Form1 List Instances | выбр. ds1;DataMember| выбр.Students_Info
16. Изменить размеры формы для вмещения всей таблицы Grid.
17. Установить на форму компонент BindingSource:
Toolbox|Data|BindingSource►выдел. лев. кн. мыши и перетащить на форму ►
на форме появится серое прямоугольное поле (элемент bindingSource1.
18. Переименовать компонент bindingSource1:
Выделить bindingSource1 | ф. Properties | выбр. Name←bdSource.
19. Установить на форму компонент BindingNavigatorдля навигации по записям:
Toolbox|Data|BindingNavigator►выдел. лев. кн. мыши и перетащить на форму ►
на форме появится серое прямоугольное поле (элемент bindingNavigator1); растянуть компонент по размерам формы
20. Переименовать компонент bindingNavigator1:
Выделить bindingNavigator1 | ф. Properties | выбр. Name←Navigator.
21. Привязать навигатор к источнику данных:
Выделить Navigator | ф. Properties | выбр. BindingSource← выбр.bdSource.
22. Проверить работоспособность приложения с помощью клавиши [F5].
