Изучение возможностей СУБД Microsoft SQL Server 2005

advertisement
Лабораторная работа № 2
Изучение возможностей СУБД Microsoft SQL Server 2005
по созданию и ведению баз данных
1. Цель работы
Целью работы является изучение возможностей СУБД Microsoft SQL Server 2005 по созданию и ведению баз данных.
2. Задачи
Задачами лабораторной работы являются овладение навыками создания и заполнения
таблиц баз данных, создания представлений, триггеров и хранимых процедур, освоение программных технологий доступа к базам данных Microsoft SQL Server по технологии
ADO.NET.
3. Теоретическая часть
Серверные СУБД – СУБД, предназначенные для управления доступом к базам данных
по технологии «клиент-сервер» (технология, по которой клиент посылает запросы, которые
обрабатываются на сервере, а затем клиенту возвращается результат). Они используются для
«больших» баз данных (терабайты информации), большого числа пользователей, распределенных по всему миру, для работы через Интернет.
Microsoft SQL Server является ярким представителем серверных СУБД. Первая версия
этой реляционной СУБД была разработана компаниями Microsoft и Sybase в 1988 году и
предназначалась для платформы OS/2. Последующие версии этого сервера баз данных предназначались для платформы Windows и со временем были тесно интегрированы с этой операционной системой. Для других платформ версии этого сервера не выпускались и не выпускаются, что не вписывается в тенденции повсеместного перехода на Linux.
СУБД Microsoft SQL Server представляет собой современную полнофункциональную
базу данных, которая идеально подходит для малых и средних организаций. Ее важнейшими
характеристиками являются:
– простота администрирования. Это одно из важнейших преимуществ СУБД: В комплект средств административного управления данной СУБД входит целый набор специальных мастеров и средств автоматической настройки параметров конфигурации.
– возможность подключения к Web;
– быстродействие и функциональные возможности механизма сервера СУБД;
– наличие средств удаленного доступа.
Кроме того, СУБД Microsoft SQL Server в качестве языка запросов использует стандартизованную версию языка SQL (Transact-SQL или T-SQL).
На сегодняшний день наиболее широко используемой являются выпущенные в 2005 г.
версия Microsoft SQL Server 2005 (кодовое название Yukon) и в 2008-2010 гг – Microsoft SQL
Server 2008 (кодовое название Katmai).
Кроме того, существует дополнительная «сокращенная» версия – Microsoft SQL Server
Express: она доступна для скачивания и может бесплатно распространяться вместе с использующим ее программным обеспечением. Данная версия имеет некоторые технические ограничения, которые делают ее непригодной для развертывания больших баз данных, но она
вполне годится для ведения программных комплексов в масштабах небольшой компании.
Содержит полноценную поддержку новых типов данных, в том числе XML-спецификации.
Фактически, это полноценный MS SQL Server, включая все его компоненты программирования, поддержку национальных алфавитов и Unicode. Поэтому часто SQL Server Express используется в приложениях, при проектировании или для самостоятельного изучения.
1
Система SQL Server может быть реализована либо как клиент-серверная система, либо
как автономная «настольная» система. Тип проектируемой системы зависит от количества
пользователей, которые должны одновременно осуществлять доступ к базе данных, и от характера работ, которые должны выполняться.
Триггеры. Триггерные процедуры (или просто триггеры) автоматически вызываются,
как только происходит некоторое событие (или условие запуска). Обычно условием запуска
является выполнение некоторой операции обновления базы данных, но это может быть и
определенная исключительная ситуация (например, нарушение некоторого установленного
ограничения целостности) или истечение заданного времени.
Каждый триггер привязывается к конкретной таблице. При этом все производимые
триггером модификации данных рассматриваются как одна транзакция. В случае обнаружения ошибки или нарушения целостности данных происходит откат этой транзакции: внесение изменений запрещается, а все изменения, уже сделанные триггером, отменяются.
Триггерные события состоят из вставки, удаления и обновления строк в таблице. В отличие от обычной подпрограммы, триггер выполняется неявно в каждом случае возникновения триггерного события, к тому же он не имеет аргументов. Приведение его в действие иногда называют запуском триггера. Момент запуска триггера определяется с помощью ключевых слов BEFORE (триггер запускается до выполнения связанного с ним события; например,
до добавления записи) или AFTER (после события). В случае, если триггер вызывается до
события, он может внести изменения в модифицируемую событием запись (конечно, при
условии, что событие не удаление записи).
При выполнении команд добавления, изменения и удаления записей сервер создает две
специальные таблицы: inserted и deleted. В них содержатся списки строк, которые будут
вставлены
или
удалены
по
завершении
транзакции.
Структура
таблиц inserted и deleted идентична структуре таблиц, для которой определяется триггер. Для
каждого триггера создается свой комплект таблиц inserted и deleted, поэтому никакой другой триггер не сможет получить к ним доступ. В зависимости от типа операции, вызвавшей
выполнение триггера, содержимое таблиц inserted и deleted может быть разным. Например,
при использовании команды INSERT в таблице inserted содержатся все строки, которые
пользователь пытается вставить в таблицу; в таблице deleted не будет ни одной строки; после
завершения триггера все строки из таблицы inserted переместятся в исходную таблицу.
Основной формат команды создания триггера CREATE TRIGGER имеет следующий
вид:
CREATE TRIGGER имя_триггера
BEFORE | AFTER <триггерное_событие>
ON <имя_таблицы>
[REFERENCING
<список_старых_или_новых_псевдонимов>]
[FOR EACH { ROW | STATEMENT}]
[WHEN(условие_триггера)]
<тело_триггера>
Хранимые процедуры. Хранимые процедуры позволяют повысить производительность, расширяют возможности программирования и поддерживают функции безопасности
данных. Это именованная совокупность нескольких операторов (или даже один оператор),
сохраненная для последующего использования в откомпилированном виде.
В коде хранимой процедуры можно использовать не только операции выборки и модификации данных, но и логику ветвления, переменные, вызовы других процедур и некоторые
другие средства, характерные для языков программирования высокого уровня. Код процедуры синтаксически анализируется при компиляции, а оптимизированный план выполнения
2
создается при первом вызове процедуры. В отличие от запросов, хранимые процедуры имеют возможность возвращать несколько наборов записей, а также значения.
Вместо хранения часто используемого запроса, клиенты могут ссылаться на соответствующую хранимую процедуру. При вызове хранимой процедуры ее содержимое сразу же
обрабатывается сервером. Для вызова процедуры клиентская программа или другая процедура должны указать имя выполняемой процедуры и передать ей набор входных параметров.
Основными преимуществами хранимых процедур являются следующие:
– упрощение сложных операций за счет инкапсуляции процессов в один блок, простой
для выполнения;
– обеспечение непротиворечивости данных без необходимости снова и снова воспроизводить одну и ту же последовательность шагов. Если все разработчики и приложения используют одни и те же хранимые процедуры, значит, один и тот же код будет использоваться
всеми.
– предотвращение ошибок. Чем больше шагов необходимо выполнить, тем выше вероятность появления ошибок. Предотвращение ошибок обеспечивает целостность данных.
– упрощение управления изменениями. Если таблицы или имена столбцов изменяются, обновлять приходится только код хранимой процедуры и ничего больше.
– повышение безопасности. Ограничение доступа к основным данным только через
хранимые процедуры снижает вероятность повреждения данных (случайного или преднамеренного).
– повышение производительности. Поскольку хранимые процедуры обычно сохраняются в
компилированном виде, СУБД тратит меньше времени на обработку их команд.
– возможность написания более гибкого и мощного кода. Существуют элементы языка SQL
и некоторые возможности, реализуемые только в хранимых процедурах.
Основной формат команды создания хранимой процедуры CREATE PROCEDURE имеет следующий вид:
CREATE PROCEDURE имя_хранимой_процедуры([параметр[,...]]) [характеристика ...]
тело_процедуры
ADO.NET (ActiveX Data Objects .NET) является набором классов, реализующих программные интерфейсы для облегчения подключения к базам данных из приложения независимо от особенностей реализации конкретной системы управления базами данных и от
структуры самой базы данных, а также независимо от места расположения этой самой базы –
в частности, в распределенной среде (клиент-серверное приложение) на стороне сервера.
В библиотеки ADO.NET входят классы провайдеров, использующиеся для обмена данными между хранилищем и клиентским приложением. Разнообразие типов хранилищ данных определяет потребность в связывании классов доступа с данными из разнотипных хранилищ. Классы провайдеров данных – классы, отвечающие за обмен данными между отсоединенными классами клиентского приложения и хранилищем.
Для взаимодействия с СУБД SQL Server версии 7.0 и выше в .NET Framework используется провайдер SQL Server, который включает в себя классы с функциональностью, аналогичной функциональности провайдера общего назначения OleDb.
Чтобы получить доступ к хранилищу данных, требуется подходящий объект открытого
подключения. Для этого предназначен класс DbConection. Данный класс – абстрактный, от
него порождаются все классы подключений, специфичные для отдельных провайдеров
(например, SQLConnection для SQL Server). В качестве параметра конструктору этого класса
передается строка подключения, а для отправки любых команд хранилищу данных соединение необходимо открыть.
На следующем шаге работа ведется с объектами DbDataAdapter и DataSet. Объект DataSet – это помещаемое в память компьютера представление о наборе взаимосвязанных таблиц. Это аналог Recordset из «обычного» ADO. Отличие заключается в том, что Recordset
3
представляет собой единственную таблицу, а DataSet – набор таблиц и отношений между
ними.
Объект DbDataAdapter используется для извлечения данных в DataTable и записи обновленных данных в хранилище. Класс DbDataAdapter – родитель классов DbDataAdapter,
специфичных для отдельных провайдеров (в частности, SQLDataAdapter для SQL Server).
Основное назначение этого класса – извлечь информацию из источника данных и заполнить
ею объект DataTable в DataSet при помощи метода OleDbDataAdapter.Fill(). В качестве параметров конструктору этого класса необходимо указать информацию о параметрах подключения к базе данных и команду SELECT на языке SQL, которая будет использована для заполнения DataTable. Для этого класс DbDataAdapter имеет свойство SelectCommand – команду, применяемую для извлечения данных. Значением свойства SelectCommand должен быть
допустимый объект DbCommand, использующий корректное подключение. Если требуется
только чтение данных их хранилища, допустимо не создавать объекты команд для остальных
свойств.
Объект DbCommand используется для отправки операторов языка SQL хранилищу
данных. Ему требуется открытое подключение, через которое команда передается хранилищу данных.
Объект DataTable представляет табличные данные в виде строк, столбцов и ограничений. Объекты DataTable используются для хранения данных в памяти (при выполнении операций над отсоединенными данными). Его дополняет объект DataView – представление объекта DataTable. Это представление можно сравнить с окном, через которое избранная часть
содержимого DataTable. Содержимое этого представления можно упорядочивать и фильтровать с помощью соответствующих методов.
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);
– задать поле идентификатора студента (счетчик, первичный ключ):
4
ф. Таблица – 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; кн. Закрыть.
5
– задать поле номера группы 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 (идентификатор предмета (тип такой же, как в таблице Предметы, но не
счетчик));
6
– 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);
7
(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 для таблицы успеваемости
8
ф. Среда 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. Запустить среду программирования Microsoft Visual C#:
9
Пуск | Программы | 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; кн. Test Connection ► если появилось сообщение «Test connection succeeded», то соединение установлено успешно;
иначе перезагрузить компьютер и попробовать снова, не загружая при этом SQL Server; кн. 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 |
10
кн. 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 | выбр. Binding Source ← выбр. bdSource.
22. Проверить работоспособность приложения с помощью клавиши [F5].
5. Контрольные вопросы
1. Что такое серверные СУБД?
2. Каковы особенности СУБД Microsoft SQL Server?
3. Что представляют собой триггеры?
4. Что такое хранимая процедура?
5. Какие классы ADO.NET Вы знаете?
6. Содержание и оформление отчета
Отчет должен содержать:
– титульный лист, название и цель работы;
– скриншоты результатов работы с СУБД Microsoft SQL Server;
– выводы по работе.
11
Download