Базы данных - Высшая школа экономики

advertisement
Правительство Российской Федерации
Федеральное государственное автономное образовательное учреждение
высшего профессионального образования
Национальный исследовательский университет
Высшая школа экономики
Факультет бизнес-информатики
Программа учебной практики
для студентов 2 курса
направления 080700 –Бизнес-информатика
подготовки бакалавров
Автор Акопов А.С.
Одобрена на заседании
кафедры бизнес-аналитики
Зав. кафедрой
___________________ Т.К Кравченко
«_____»________________ 2012 г.
Москва - 2012
1. Цель проведения учебной практики:
Главной целью проведения учебной практики студентов 2-го курса факультета бизнес
информатики по дисциплине «Управление данными» является развитие и закрепление
практических навыков разработки внешних приложений (под WEB) к базам данных,
спроектированным в домашнем задании и курсовой работе.
Современные информационные технологии позволяют разрабатывать приложения баз
данных под Windows и WEB. При этом приложения баз данных под WEB обладают
значительными преимуществами по сравнению с обычными Windows приложениями, так как
они реализуется в распределенной среде, могут быть доступны неограниченному количеству
пользователей посредством сети Интернет, легко обновляемы и масштабируемы, т.к. такие
приложения размещаются централизованно на WEB-Сервере (например, под управлением
Apache HTTP-сервер) и не требуют установки дополнительного программного обеспечения
на клиентских компьютерах.
WEB- приложение базы данных – это совокупность пользовательских прикладных
программ, разработанных для конкретной СУБД с применением современных языков WEBпрограммирования (ASP.NET, PHP, JSP и др.) и технологий доступа к данным (ADO.NET,
ODBC, JDBC и др.). WEB- приложение как правило включает HTML-формы обработки
данных пользователей (применяемые в основном для загрузки данных в базу, например,
анкета на сайте) и динамические WEB-страницы для вывода (визуализации) информации из
СУБД.
Для
разработки
Web-приложений
рекомендуется
использование
следующих
технологий класса Open Source (открытого кода, не требующих лицензий): HTML, PHP,
CУБД MySQL, EMS SQL Manager for MySQL Freeware, XML, PHP Report Maker и др.
2. Задачи учебной практики:
-
приобрести навыки в разработке и документировании серверных сценариев
написанных
на
объектно-ориентрованном
языке
программирования
PHP,
обеспечивающим решение прикладных задач на основе созданной базы данных;
-
научиться организовывать доступ к различным СУБД (MySQL Server, MS SQL
Server и др.) посредством WEB-интерфейса
с использованием различных
технологий;
-
создавать профессиональные WEB-приложения баз данных. Например, создать
WEB-форму для ввода данных в таблицу базы данных, форму для выполнения
запросов
на
языке
SQL,
динамические
WEB-страницы
для
вывода
(визуализации) данных из СУБД в форме отчетов и графиков.
2
3. Порядок проведения учебной практики
Учебная практика по дисциплине «Управление данными» на факультете бизнес
информатики проводится на базе технологий Open Source: PHP 5 и MySQL Server 5, как
наиболее пригодных для приобретения базовых навыков создания профессиональных
приложений баз данных под WEB. Для облегчения процедуры инсталляции данного
программного обеспечения рекомендуется использование специального инсталлятора
«Денвер»
(http://www.denwer.ru/base.html),
включающего
PHP5
с
поддержкой
GD
(графическая библиотека) и MySQL, sqLite MySQL5 с поддержкой транзакций.
4. Результаты, получаемые в процессе учебной практики
В результате учебной практики студенты должны разработать внешнее диалоговое
приложение к базе данных.
WEB-приложение базы данных должно включать:
1. WEB-интерфейса для базы данных с основными элементами управления в
виде меню (написанным на HTML/DHTML), обеспечивающим возможность
навигации по всем приложению (сайту) и возможность работы с основными
таблицами БД (формы ввода/редактирования данных в таблицы через WEB),
выполнение SQL- запросов c выводом результатов на WEB-страницу в виде
отчетов и графиков и др.;
2. Формы (отдельные WEB-страницы с элементами управления, написанными
на HTML) для выполнения основных функций работы с таблицами БД
(ввод, редактирование, удаление и др. записей в таблицах);
3. Формы, позволяющие вводить произвольную SQL инструкцию через WEBинтерфейс и выполнять эти запросы с выводом результатов на WEBстраницу;
4. WEB-страницы, позволяющие вывести на экран компьютера данные из
СУБД в различных форматах (таблица и график).
5. Оформление результатов учебной практики
Результаты учебной практики оформляются в виде письменного отчета, который
создается в редакторе MS Word. Отчет должен содержать:
-
титульный лист, на котором размещается: название учебного заведения; название
факультета; название дисциплины, по которой проводилась учебная практика;
3
тема отчета; номер группы, фамилия, имя и отчество студента; фамилия, имя и
отчество преподавателя;
-
введение, в котором описываются цели и функции прикладной системы;
-
описание схемы WEB-интерфейса (структура сайта, перечень WEB-страниц
взаимодействующих с СУБД и др.).
-
уточненную ER-модель базы данных (ER-модель берется из курсовой работы или
строится в EMS SQL Manager for MySQL);
-
краткое обоснование выбора средств проектирования диалогового приложения;
-
скриншоты всех WEB-страниц, которые вошли в приложение;
-
листинги программ и скриптов на PHP;
-
примеры работы WEB-приложений (скриншоты);
-
отчеты, подготовленные с помощью PHP Report Maker.
Общий объем отчета по учебной практике должен составлять примерно 15 листов
формата А4. Шрифт Times 14, поля: левое и правое по 2,5 см., сверху и снизу по 2 см.
Желательно, чтобы скриншоты для лучшей наглядности были обработаны графическим
редактором.
6. Методы решения поставленных задач
Разработка приложений баз данных под WEB проводится с использованием
программных продуктов класса Open Source (PHP, MySQL), которые имеют эффективные
средства доступа к базам данных и реализации запросов.
Студенты должны разработать приложения с применением различных технологий, как
платформенно
независимых
(собственные
библиотеки
баз
данных
PHP),
так
с
использованием драйверов ODBC и интерфейсов ADO.
Основы применяемой технологии проектирования WEB-приложений изложены в
работах [1-10].
Разрабатываемые в процессе учебной практики приложения к базам данных должны
включать следующие операции:
-
просмотр, корректировку данных в реляционных таблицах СУБД, добавление и
удаление записей через WEB-интерфейс;
-
формирование
SQL-запроса в индивидуальной форме на WEB-странице с
дальнейшей визуализацией результатов запроса в табличной форме;
-
создание сложного WEB-интерфейса (типа «продавец и его заказы» на одной
WEB-странице), динамических отчетов в табличной и графической форме.
4
7. Рекомендуемая литература
Основная литература:
1. Акопов А.С. Учебно-методическое пособие по курсу «Базы данных» по теме
РАЗРАБОТКА WEB-ПРИЛОЖЕНИЙ НА СТОРОНЕ СЕРВЕРА. Утверждено Учебнометодическим советом факультета «Бизнес-информатика» ГУ-ВШЭ в качестве
учебного пособия для студентов 20.04.2010.
2. Эд Леки-Томпсон, Хьяо Айде-Гудман, Алек Коув, Стивен Д. Новицки. PHP 5 для
профессионалов. Издательства: Диалектика, Вильямс, 2006 г.
3. Кристина Пейтон, Андре Меллер. PHP 5 & MySQL 5. Издательство: Бином-Пресс, 2007
г.
4. Андерсон Р., Фрэнсис Б., Хомер А. и др. ASP.NET для профессионалов. В 2 томах.
Издательство: Лори, 2004 г.
Дополнительная литература:
4. Чак Муссиано и Билл Кеннеди. HTML и XHTML. Подробное руководство.
Издательство: Символ-Плюс, 2008 г.
5. Дэвид Флэнаган. JavaScript. Подробное руководство. Издательство: Символ-Плюс, 2008
г.
6. Эрик А. Мейер. CSS. Каскадные таблицы стилей. Подробное руководство. Издательство:
Символ-Плюс, 2008 г.
7. Хэт Хенриксон, Скотт Хоффман. IIS 6. Полное руководство. Издательство: Эком, 2004г.
8. Кристиан Дари, Богдан Бринзаре, Филип Черчез-Тоза, Михай Бусика. AJAX и PHP.
Разработка динамических веб-приложений. Издательство: Символ-Плюс, 2006г.
9. Артемий Ломов. Самоучитель Apache, Perl, MySQL. Практика создания динамических
сайтов (+ CD-ROM). Издательство: БХВ-Петербург, 2007г.
10. Николас Закас, Джереми Мак-Пик, Джо Фосетт. Ajax для профессионалов.
Издательство: Символ-Плюс, 2008г.
8. Приложения
Приложение 1. Список рекомендуемых проблемных областей для проектирования
учебной базы данных (для домашней и курсовой работ и учебной практики).
Приложение 2. Методические указания к проектированию приложений к базе данных под
WEB.
5
Приложение 1
Темы для проектирования баз данных
1. Обменный пункт: сотрудники пункта, виды валют, курсы валют, операции обмена.
2. Ювелирный магазин: названия изделий, комитенты (кто сдал изделия на комиссию),
журнал сдачи изделий на продажу, журнал покупки изделий.
3. Поликлиника: врачи, пациенты, виды болезней, журнал учета прихода пациентов.
4. Кондитерский магазин: виды конфет, поставщики, торговые точки, журнал
поступления и отпуска товара.
5. Автобаза: автомашины, водители, рейсы, журнал выезда машин на рейсы.
6. Парикмахерская: клиенты, прайс услуг, сотрудники, кассовый журнал.
7. Склад: поставщики товара, список товара, получатели товара, кладовщики.
8. Школа: учителя, предметы, ученики, журнал успеваемости.
9. Оплата услуг на дачных участках: виды услуг, список владельцев, сотрудники
управления, журнал регистрации оплат.
10. Гостиница: проживающие, сотрудники гостиницы, номера, журнал регистрации
проживающих.
11. Книжный магазин: авторы, книги, продавцы, покупатели, регистрация продаж.
12. Ремонтная мастерская: виды работ, исполнители, заказы на ремонт, заказчики.
13. Аптечный киоск: номенклатура лекарств, работники аптеки, покупатели, журнал
регистрации продаж.
14. Выставка: стенды, стендисты, экскурсии, посетители.
15. Охранная служба: список постов охраны, список охранников, журнал выхода на
дежурство, журнал учета замечаний.
16. Столовая: продукты, блюда, меню, журнал заказов
17. Фото мастерская: заказчики работ, прайс работ, журнал поступления заказов,
исполнители.
18. Ветеринарная лечебница: список животных, список болезней, список хозяев, журнал
посещений.
19. Сельское хозяйство: список растений, список угодий, список работников, журнал
посевной.
20. Холдинг: список регионов, список предприятий, список показателей, журнал учета
отчетных данных.
21. Фонды предприятия: список основных средств, список категорий основных средств,
список материально ответственных лиц, журнал учета состояния основных средств.
22. Учет расхода материалов в компании: список статей затрат, список сотрудников,
журнал учета расхода канцтоваров, список департаментов.
23. Фильмотека: список фильмов, список клиентов, список библиотекарей, журнал выдачи
фильмов.
24. Цирк: список категорий артистов, список артистов, журнал выхода артистов на работу,
список цирковых площадок.
25. Спортивные заведения: список спортсменов, список видов спорта, список стадионов,
журнал учета выступлений спортсменов.
26. Компьютерные занятия: список слушателей курсов, список предметов, список
преподавателей, журнал учета успеваемости.
27. Сбор урожая: список видов продукции, список сборщиков, список бригад, журнал
учета сбора урожая.
28. Фирма по обслуживанию населения: список заказчиков, список товаров, список
разносчиков, журнал заказов.
29. Партийная работа: список членов партии, список мероприятий, журнал учета выхода
на мероприятие, список городов
6
30. Экономическая база данных: список регионов, список показателей, список отраслей,
отчетные статистические данные.
31. Журнальные статьи: список тем, список авторов, список названия статей, список
журналов.
32. Анализ причин заболеваемости: список больных, список болезней, список районов,
журнал учета заболевших.
33. Отдел кадров: список сотрудников, штатное расписание, список отделов, журнал
перемещения сотрудников по службе.
34. Делопроизводство: список видов документов, карточка документа, список
исполнителей, список департаментов
35. Расчет нагрузки на преподавателя: список преподавателей, список кафедр, предметов,
журнал нагрузки.
36. Проектные работы: список проектов, список специалистов, список должностей,
журнал учета работ.
37. Учет компьютерного оборудования: список типов оборудования, список материально
ответственных лиц, список департаментов, журнал регистрации выдачи оборудования.
38. Прививки детям: список прививок, список детей, список родителей, журнал учета
сделанных прививок.
39. Начисление налогов в бюджет: виды налогов, список отраслей, список предприятий,
журнал учета поступления налогов.
40. Экспертная система: список оцениваемых объектов, список экспертов, список
регионов, журнал учета оценок.
41. Ремонтная мастерская электронного оборудования: список работ, список мастеров,
список запасных частей, журнал учета выполненных работ, список поступившего
оборудования.
42. Магазин по продаже автомобилей: список фирм производителей, список автомобилей,
журнал поступления автомобиля, список водителя пригнавшего машину.
43. Автомобильный гараж: список владельцев, список автомобилей, список сторожей,
журнал прихода и ухода автомобилей.
44. Учет криминогенной ситуации в городе: список районов, список типов преступлений,
список дежурных, журнал регистрации преступлений.
45. Система здравоохранения: список регионов, список санаториев, список пенсионеров,
журнал регистрации выдачи путевок в санатории.
46. Туристические агентства: список туров, список стран, список клиентов, журнал
регистрации продаж туров.
47. Продажа билетов на рейсы: список рейсов, прайс билетов, список компаний, журнал
продаж билетов.
48. Продажа пиломатериалов: виды пиломатериалов, регионы поставщики, список
заказчиков, журнал учета продаж пиломатериалов.
49. Склад металлоконструкций: прайс товара металлоконструкций, список поставщиков,
список продавцов, журнал учета продаж.
50. Система поддержки решений: список экспертов, список тем обсуждений, список
департаментов, журнал учета предложений.
51. Детский сад: список родителей, список детей, список групп, журнал посещения
детского сада.
52. Дом творчества молодежи: список кружков, список руководителей, список детей,
журнал регистрации посещения кружков.
7
Приложение 2
Введение .............................................................................................................................................. 9
Раздел 1. Основы языка программирования PHP ............................................................... 11
1.1 Введение в PHP ................................................................................................................... 11
1.2 Установка интерпретатора PHP .................................................................................... 14
1.3 Полезные конструкции на PHP ......................................................................................... 17
1.4 Управляющие структуры PHP ......................................................................................... 19
1.5 Работа с файловой системой ........................................................................................... 20
1.6 Базы данных и PHP............................................................................................................. 21
Раздел 2. Основы технологии ASP.NET и ADO.NET ........................................................... 27
2.1 Введение в ASP.NET ............................................................................................................ 27
2.2 Установка программного обеспечения для ASP.NET...................................................... 31
2.3 Полезные конструкции на ASP.NET .................................................................................. 33
2.4 Управляющие структуры ASP.NET .................................................................................. 34
2.5 Работа с файловой системой ........................................................................................... 35
2.6 Базы данных и ASP.NET ..................................................................................................... 36
Раздел 3. Разработка приложений для WEB с использованием MySQL ......................... 41
3.1 Введение в MySQL ............................................................................................................... 41
3.2 Взаимодействие MySQL и PHP. ....................................................................................... 43
3.3 Визуальные средства проектирования для MySQL. ....................................................... 50
8
Введение
В настоящее время количество приложений с использованием систем управления
реляционными базами данных (СУБД) неуклонно растет. Особенно на этом фоне выделяются
разработки под Интернет.
Современные информационные системы, такие как динамические WEB-сайты,
используют
СУБД
для
управления
контентом
(информационным
наполнением)
и
обеспечения интерфейса взаимодействия с пользователями. Динамические Web-сайты, как
правило, основаны на шаблонных страницах (в частности, HTML-формата), в которые
вставляется (когда пользователь запрашивает соответствующие страницы через WEBбраузер) постоянно меняющееся информационное наполнение, извлекаемое из СУБД.
Отметим, что HTML
гипертекста») —
стандартный
(от англ. HyperText Markup Language — «язык разметки
язык
разметки
документов
во
Всемирной
паутине.
Большинство WEB-страниц создаются при помощи языка HTML (или XHTML).
Динамические WEB-сайты, как правило, создаются с использованием различных
скриптовых
языков
программирования
и
технологий,
среди
которых,
наиболее
распространенными являются:
 PHP
(англ.
PHP:
Hypertext
Preprocessor —
«PHP:
препроцессор
гипертекста») — скриптовый язык программирования общего назначения,
интенсивно применяющийся для разработки WEB-приложений, в том числе
взаимодействующих с СУБД;
 ASP.NET — технология создания WEB-приложений и WEB-сервисов от
компании Microsoft. Она является составной частью платформы Microsoft
.NET. . Разработчики могут писать код для ASP.NET, используя практически
любые языки программирования, в том числе, и входящие в комплект .NET
Framework (C#, Visual Basic.NET, и JScript .NET). ASP.NET имеет
преимущество в скорости по сравнению со скриптовыми технологиями, так
как при первом обращении код компилируется и помещается в специальный
кэш, и впоследствии только исполняется, не требуя затрат времени на
парсинг, оптимизацию, и т. д.
Существуют и другие языки программирования и технологии создания динамических
WEB-приложений, взаимодействующих с СУБД, например, язык программирования Java
Server Pages (JSP), технология Java 2 Enterprise Edition и JDBC, технология создания
расширений ISAPI и приложений CGI на языке программирования C++ и др. Такие
технологии имеют определенные достоинства и недостатки, связанные с быстродействием,
функциональными
возможностями,
и
др.
Вместе
с
тем,
в
процессе
обучения
9
программированию приложений баз данных для WEB целесообразно ориентироваться на
наиболее популярные инструменты, такие как PHP, и ASP.NET (VBScript .NET). При этом
следует отметить, что скриптовый язык программирования PHP является более простым в
использовании и ориентирован на проектирование малых и средних динамических WEBсайтов (таких как,
форумы, блоги, интернет-магазины и др.), а технология ASP.NET
предназначена для проектирования больших информационных систем (например, Интернетпорталов) и предполагает активное использование методов объектно-ориентированного
программирования (ООП) и визуальных средств разработки, в частности, Microsoft Visual
Studio. Также отметим, что технология PHP наилучшим образом адаптирована для работы с
СУБД MySQL, а ASP.NET для взаимодействия с СУБД Microsoft SQL Server (посредством
специальной технологии ADO.NET) .
Основной целью изучения темы «Разработка WEB-приложений на стороне сервера»,
изучаемой в рамках курса «Базы данных», является обучение студентов методологии
проектирования приложений взаимодействующих с СУБД для WEB. Основные задачи темы:
расширение и углубление теоретических знаний в области разработки баз данных; овладение
специальными языками программирования, обеспечивающими возможность разработки
приложений баз данных для WEB; изучение специфики технической реализации СУБД для
WEB, в частности, на примере MySQL; изучение наиболее типичных примеров создания
динамических WEB-страниц, взаимодействующих с СУБД.
Освоение темы предполагает знание основ технологий реляционных баз данных,
программирования на языках: Си, Visual Basic и SQL, а также теоретических основ вебдизайна (HTML, CSS и др.).
10
Раздел 1. Основы языка программирования PHP
Как было отмечено ранее, PHP (англ. PHP: Hypertext Preprocessor — «PHP:
препроцессор гипертекста») — скриптовый язык программирования общего назначения,
интенсивно
применяющийся
для
разработки
WEB-приложений,
в
том
числе
взаимодействующих с СУБД.
В отличие, в частности, от сценариев JavaScript и VBScript, выполняемых на стороне
«клиента», PHP сценарии выполняются на стороне «сервера» и позволяют работать с
различными СУБД, например MS SQL Server, Oracle, серверной файловой системой,
почтовыми сервисами и др.
Обратите внимание. Для работы с PHP (ASP, JSP и др.) (в отличие от JavaScript)
нужен установленный и специально настроенный WEB-сервер, например, Internet Information
Server (IIS). К примеру, если у Вас установлена операционная система Windows XP/Vista и
т.п., то Вы можете скачать дистрибутив PHP c сайта: www.php.net (например, для пятой
версии: http://ru.php.net/get/php-5.2.12-Win32.zip/from/a/mirror).
Обратите внимание. PHP является свободно распространяемым продуктом, класса
Open Source (открытого исходного кода).
Отметим, что файл, использующий PHP-сценарии, должен, как правило, иметь
расширение «*.php».
Следующий код
<?php echo ("Hello, World!); ?>
Дает
Hello, World!
Имена переменных обозначаются знаком $. То же самое "Hello, World!" можно
получить следующим образом:
<?php
$message = "Hello, World!";
echo($message);
11
?>
Конкатенация (присоединение) строк осуществляется с помощью . (точки); обычные
арифметические операции определяются так, как Вы того и ожидаете:
<?php
$greeting = "Hello ";
$num = 3 + 2;
$num++;
echo ("$greeting.$num.”people!“);
?>
даст Hello 6 people!
Обратите внимание. Синтаксис PHP очень похож на C.
Cтрока, заключенная в двойные кавычки, означает, что встречающиеся в этой строке
переменные будут заменены их значениями, в то время как если строка заключена в
одинарные кавычки, такая замена не производится. Так
<?php
$name = 'Susannah';
$greeting_1 = "Hello, $name!";
$greeting_2 = 'Hello, $name!';
echo "$greeting_1\n";
echo "$greeting_2\n";
?>
даст
Hello, Susannah!
Hello, $name!
Обратите внимание на то, что \n в строке означает переход к новой строке, совсем как
в Perl или в C. Однако это работает только в тех строках, которые взяты в двойные кавычки.
12
PHP обеспечивает доступ к переменным окружения как к регулярным переменным.
Например, при нажатии на кнопку формы инициируется передача данных формы методом
GET или POST
Такой сценарий:
<?php
$action = $_REQUEST[‘sbt']; // Можно также использовать $_POST[‘sbt'];
echo($action);
?>
Даст результат:
Вход
после нажатия на кнопку «Вход»
<Form name=“frm1” METHOD=POST>
<INPUT TYPE = "Submit" NAME="sbt" VALUE="Вход">
</Form>
Очевидное достоинство PHP в том, что Вам не надо заботиться о получении,
раскодировании и любой другой обработке данных из формы, как например при написании
CGI программы на языке C/C++. За нас все делает PHP. Очень легко и красиво он
автоматически заполняет несколько встроенных массивов:
$_SERVER ($HTTP_SERVER_VARS) - для серверных переменных;
$_ENV ($HTTP_ENV_VARS) - для переменных среды, в которой работает PHP;
$_COOKIE ($HTTP_COOKIE_VARS) - для переменных передающихся посредством cookies;
$_GET ($HTTP_GET_VARS) - для параметров формы, переданных посредством метода GET;
$_POST ($HTTP_POST_VARS) - для параметров формы, переданных методом POST;
$_FILES ($HTTP_POST_FILES) - для закачиваемых посредством метода POST файлов;
$_REQUEST - массив содержащий внутри себя массивы $_GET, $_POST и $_COOKIE;
$_SESSION ($HTTP_SESSION_VARS) - для хранения параметров сессии.
Используя $_REQUEST, Вы получаете доступ к данным формы. Можете сохранить
эти данные в Базе Данных и т.д.
13
Шаг 1. Распакуйте дистрибутив в папку C:\PHP
Шаг 2. Настройте Internet Information Server на своем локальном компьютере, так чтобы
выполнялась обработка файлов с расширением *.php. Для этого нужно зайти в Панель
управления Windows, далее – Администрирование, далее - Диспетчер служб IIS. Затем нужно
добавить обработку php-сценариев фильтром ISAPI для всех узлов по умолчанию с помощью
вкладки «Фильтры ISAPI» (рис. 1)
Рис. 1. Добавление фильтра ISAPI для обработки PHP-сценариев.
Отметим, что Internet Server Application Programming Interface (ISAPI) — это API
(Application Programming Interface - набор готовых классов, функций, структур и констант,
предоставляемых приложением (библиотекой, сервисом) для использования во внешних
программных продуктах.) для Internet Information Services, коллекции сетевых служб
Microsoft Windows.
Соответственно, фильтры ISAPI представляют собой динамические
библиотеки DLL, напрямую взаимодействующие с IIS.
Далее, нужно добавить «Сопоставление сценария PHP с исполняемым файлом ISAPIфильтра (php5isapi.dll). Это можно сделать в разделе «Сопоставление обработчиков» системы
администрирования IIS (рис. 2).
14
Рис. 2. Настройка «Сопоставления обработчиков» IIS для PHP.
Обратите внимание. Для различных версий ОС Windows, интерфейс Диспетчера служб IIS
также будет различным. К примеру, в для Windows XP добавление фильтра ISAPI для PHP
имеет вид рис. 3.
15
Рис. 3. Добавление фильтра ISAPI для обработки PHP-сценариев в для IIS 6.0 ОС
Windows XP.
Шаг 3. Скопируйте php5ts.dll из дистрибутива в папку C:\Windows\system32
Шаг 4. Убедитесь, что PHP работает под управлением Вашего IIS. Для этого создайте файл
test.php в папке IIS (C:\Inetpub\wwwroot) c таким кодом:
<?php
phpinfo();
?>
16
Должен быть
получен вот такой
результат
Рис. 4. Оценка корректности установки и конфигурирования PHP.
Обратите внимание на параметр Loaded Configuration File. К примеру, в нашем случае он
имеет
следующее
значение:
«C:\Program
Files\PHP\php.ini».
Это
означает,
что
кофигурационный файл, с помощью которого Вы можете переопределять параметры PHP
модуля, находится в папке «C:\Program Files\PHP), и загружен успешно.
Шаг5. Сконфигурируйте файл php.ini под Ваши задачи.
Например, если Вы планируете
работать с графической библиотекой
PHP нужно включить extensions
(php_gd2.dll)
Как конфигурировать php.ini см.
руководство по PHP [1].
Рис. 5. Конфигурирование PHP под собственные задачи.
17
include("login.php"); //Вставка файла login.php в текущий файл
<?php if ($action == “Вход”): ?>
//Здесь произвольный HTML код
//Данный блок кода будет выполнятся, только если переменная $action примет
значение «Вход», т.е. если Пользователь нажмет на кнопку «Вход
……………………………………
<?php endif; ?>
//Функция isset позволяет проверить установлено ли значение переменной $action
if(!isset($action))
$action="";
Простейший способ установить cookie на PHP таков:
setcookie('name', 'bret');
Затем, для каждой последующей страницы на Вашем сайте, просматриваемой в
течение данной сессии (пока пользователь не покинет сайт) переменная $name будет иметь
значение 'bret' и его можно легко прочитать средствами PHP. Этот тип cookie известен как
cookie-сессия, поскольку значение сохраняется в течение пользовательской сессии.
С помощью cookie можно создать, в частности, «Корзину покупок» для Интернетмагазина или запомнить «профиль» пользователя. Если Вы хотите, чтобы значение cookie
запоминалось браузером после того, как пользователь закончит сессию, Вы должны передать
функции setcookie() третий параметр - дату истечения срока действия cookie. Поскольку PHP
сформировался в основном в среде Unix, Вы должны представить время истечения срока
действия cookie как число секунд, прошедших с 1 января 1970 г.
Например, если Вы хотите, чтобы срок действия cookie истек 1 января 2000 г., Вы
записываете:
<?php
$y2k = mktime(0,0,0,1,1,2000);
setcookie('name', 'bret', $y2k); ?>
18
Удаление cookie
<?php setcookie('name'); ?>
Обратите внимание. В силу того, как организована обработка cookies в протоколе
HTTP, необходимо установить значения всех cookie до вывода какого-либо текста. Если
сделать наоборот, PHP выдаст Вам предупреждение и значение cookie не будет послано. Вот
так правильно:
<?php
setcookie('name', 'jeff');
echo "Hello Everyone!";
?>
Создать массив можно также путем вызова функции array():
$fruit = array();
$favorites = array();
или так
$fruit = array('banana','papaya'); //Создается массив из 2-х элементов
'banana‘ и 'papaya'
Индексы массивов (как обычных, так и ассоциативных) задаются в квадратных скобках ([ и ]):
$fruit[0] = 'banana';
$fruit[1] = 'papaya';
$favorites['animal'] = 'turtle';
$favorites['monster'] = 'cookie';
Вы можете использовать операторы цикла, такие как for и while. В результате выполнения
оператора:
for ($i = 4; $i < 8; $i++) {
print "I have eaten $i bagels today.\n";
}
19
Получим:
I have eaten 4 bagels today.
I have eaten 5 bagels today.
I have eaten 6 bagels today.
I have eaten 7 bagels today.
Тот же самый результат даст
$i = 4;
while ($i < 8) {
print "I have eaten $i bagels today.\n";
$i++;
}
Вы можете также использовать конструкции с if и elseif:
if ($user_count > 200) {
print "Сайт сейчас перегружен!";
}
elseif ($user_count > 100) {
print "Сайт активно используется!";
else {
print "Сайт свободен - подключились только $user_count пользователей.";
}
Вы можете использовать конструкции с switch, do...while.
switch($kv1) // Оцениваем значение переменной $kv1
{
case 1:
{ $ms1="01";
break;}
case 2:
{ $ms1="04";
break;}
}
Пример обработки файла CSV (с данными разделямыми точкой с запятой).
20
$fp = file("baza/data.txt"); //Открываем файл data.txt
$pat =";"; // Определяем разделитель данных в файле “;”
for($i = 0; $i < count($fp); $i++){
$arr = split($pat, $fp[$i]); // Формируем массив значений $arr из данных файла
}
Различные функции по работе с файлами:
fread($f, $numberbytes) - читает из файла $f $numberbytes символов и возвращает строку этих
символов.
fwrite($f, $st); - записывает в файл $f содержимое строки $st. .
fgets($f, $dlina); - считывает из файла одну строку, заканчивающеюся символом новой строки
\n.
fputs($f, $st); - аналогична функции fwrite().
Конструкция or die().
Проанализировать результат функции fopen() и если он не равен false, вывести работу
сценария позволяет конструкция or die ($err_message). Синтаксис данной конструкции
следующий:
($f=fopen("/homa/user/file.txt","r")) or die ("error");
Пример 1. Создание соединения и выбор СУБД для MySQL
<?PHP
/* Некоторые переменные */
$hostname = "localhost";
$username = "myusername";
$password = "mypassword";
$dbName = "products";
/* создать соединение */
MYSQL_CONNECT($hostname,$username,$password) OR DIE("Не могу создать
соединение ");
mysql_select_db("$dbName");
/* Осуществляем определенные операции с СУБД */
21
/* Закрыть соединение */
MYSQL_CLOSE();
?>
Обратите внимание. Для работы с MySQL из PHP нет необходимости в каких либо
дополнительных модулях. MySQL «родная» СУБД для PHP.
Пример 2. Создание соединения и выбор базы данных для MS SQL Server.
<?PHP
/* Некоторые переменные */
$hostname = "localhost";
$username = "myusername";
$password = "mypassword";
$dbName = "products";
/* создать соединение */
$link = MSSQL_CONNECT($hostname,$username,$password) or die ("Не могу создать
соединение ");
Mssql_select_db ("$dbName“, $link);
/* Осуществляем определенные операции с СУБД */
/* Закрыть соединение */
MSSQL_CLOSE();
?>
Обратите внимание. Для работы с MS SQL Server из PHP (и другими СУБД кроме MySQL),
необходимо подключить специальный модуль, соответствующий данной СУБД.
Данная
операция осуществляется в файле php.ini, посредством удаления знака «;» в соответсвующей
строке файла, т.е.
Фрагмент файла php.ini:
[PHP_MSSQL] (extension=php_mssql.dll)
Обратите внимание, что если Вы используется в качестве сервера хорошо известную
платформу MS SQL Server Express Edition, то строка соединения с базой данных «TEST» (в
режиме аутоинтификации SQL Server, т.е. по логину «sa») будет иметь следующий вид:
<?php
22
$link = mssql_connect (".\SQLEXPRESS","sa","") or die ("Could not connect");
Mssql_select_db("TEST", $link);
?>
Обратите внимание на имя сервера СУБД ".\SQLEXPRESS".
Пример 3. Создание новой таблицы в MS SQL с помощью PHP
<?PHP
$link = mssql_connect (“127.0.0.1”,"sa","") or die ("Could not connect");
Mssql_select_db("GRAF", $link);
$strSQL = "CREATE TABLE scenar( // Таблица со значением результатов прогноза
data1
datetime,
nomer_sc
INTEGER,
E decimal (20,2),
O decimal (20,2),
GT decimal (20,2),
TR decimal (20,2),
P decimal (20,2),
Y decimal (20,2),
M decimal (20,2),
N decimal (20,2),
X decimal (20,2),
CO decimal (20,2)
)";
$roma10 = mssql_query($strSQL);
if($roma10 ==1)
echo("Таблица scenar создана успешно<BR>");
?>
Пример 4. Заполнение таблицы в MS SQL с помощью PHP данными из файла
<?PHP
$link = mssql_connect (“127.0.0.1”,"sa","") or die ("Could not connect");
Mssql_select_db("GRAF", $link);
23
$fp = file("baza/data2.txt"); // В файле data2.txt находятся исходные данные
$strSQL = "delete from scenar";
$roma = mssql_query($strSQL); // Удаляем предыдущие данные
for($i = 0; $i < count($fp); $i++){
$pat =";";
$arr = split($pat, $fp[$i]); // Разбиваем текущую строку файла на массив значений по “;”
$strSQL ="SET DATEFORMAT dmy"; //День-месяц-год
$roma = mssql_query($strSQL);
$strSQL = "insert into scenar(data1, nomer_sc, E, O, GT, TR, P, Y, M, N, X, CO)
values('$arr[0]',$arr[1] , $arr[2], $arr[3], $arr[4],$arr[5] , $arr[6], $arr[7],
$arr[8],$arr[9] , $arr[10], $arr[11])";
$roma = mssql_query($strSQL); //Выполняем команду вставки записей
}
?>
Фрагмент файла data2.txt
01.07.2001;1;29.33;25.89;175.98;82.124;102.2;2193.884;12.7;1088.143;28.3;926.828;
01.07.2001;2;29.33;25.89;205.31;46.928;102.2;2229.08;12.6;1132.138;26.6;941.493;
01.07.2001;3;29.33;25.89;190.645;64.526;102.2;2193.45;12.6;1097.1;27.5;927.7;
01.07.2001;4;29.33;25.89;284.501;87.99;102.2;2190.951;12.7;1173.2;28.6;941.493;
01.10.2001;1;31;15;305;105;102.83;2543.18;13.45;1378.74;29.44;1091.46
Обратите внимание. Если файл с данными большой (например, имеет тысячи записей и
более), то лучше использовать массовую загрузку данных в MS SQL Server командой BULK
INSERT. Это будет намного быстрее.
Пример 5. Выполнение запроса к базе по заданному критерию
<?PHP
$link = mssql_connect (“127.0.0.1”,"sa","") or die ("Could not connect");
Mssql_select_db("GRAF", $link);
$strSQL1 = "select * from scenar where nomer_sc=1 AND data1 >= ‘2008-01-01’";
$zapr1=mssql_query($strSQL1);
24
$idx=1;
while($r1 = mssql_fetch_array($zapr1))
{
$E_1[$idx] = $r1["E"]; // Считываем значения переменных из Базы в массивы
переменных
$O_1[$idx] = $r1["O"];
$GT_1[$idx] = $r1["GT"];
$TR_1[$idx] = $r1["TR"];
$P_1[$idx] = $r1["P"];
$Y_1[$idx] = $r1["Y"];
$M_1[$idx] = $r1["M"];
$N_1[$idx] = $r1["N"];
$X_1[$idx] = $r1["X"];
$CO_1[$idx] = $r1["CO"];
$idx++;
}
// Осуществляем различные манипуляции с массивами переменных $E_1[$idx] и др.
?>
Отметим, что PHP поддерживает ряд функций спефифичных для MySQL, в частности,
следующие:
mysql_affected_rows -- Возвращает число затронутых прошлой операцией рядов.
mysql_change_user -- Изменяет пользователя для указанного соединения.
mysql_client_encoding -- Возвращает кодировку соединения
mysql_close -- Закрывает соединение с сервером MySQL.
mysql_connect -- Открывает соединение с сервером MySQL.
mysql_create_db -- Создаёт базу данных MySQL.
mysql_data_seek -- Перемещает внутренний указатель в результате запроса.
mysql_db_name -- Возвращает название базы данных.
mysql_db_query -- Переключается к указанной базе данных и посылает запрос.
mysql_drop_db -- Уничтожает базу данных MySQL.
mysql_errno -- Возвращает численный код ошибки выполнения последней операции с MySQL.
mysql_error -- Возвращает строку ошибки последней операции с MySQL.
mysql_escape_string -- Экранирует SQL спецсимволы для mysql_query.
mysql_fetch_array -- Обрабатывает ряд результата запроса, возвращая ассоциативный массив,
численный массив или оба.
mysql_fetch_assoc -- Обрабатывает ряд результата запроса и возвращает ассоциативный массив.
mysql_fetch_field -- Возвращает информацию о колонке из результата запроса в виде объекта.
25
mysql_fetch_lengths -- Возвращает длину каждого поля в результате.
mysql_fetch_object -- Обрабатывает ряд результата запроса и возвращает объект.
mysql_fetch_row -- Обрабатывает ряд результата запроса и возвращает неассоциативный массив.
mysql_field_flags -- Возвращает флаги указанного поля результата запроса.
mysql_field_len -- Возвращает длину указанного поля.
mysql_field_name -- Возвращает название указанной колонки результата запроса.
mysql_field_seek -- Устанавливает внутренний указатель поля на переданное смещение.
mysql_field_table -- Возвращает название таблицы, которой принадлежит указанное поле.
mysql_field_type -- Возвращает тип указанного поля результата запроса.
mysql_free_result -- Освобождает память от результата запроса
mysql_get_client_info -- Возвращает данные о MySQL-клиенте
mysql_get_host_info -- Возвращает информацию о соединении с MySQL
mysql_get_proto_info -- Возвращает информацию о протоколе MySQL
mysql_get_server_info -- Возвращает информацию о сервере MySQL
mysql_info -- Возвращает информацию о последнем запросе
mysql_insert_id -- Возвращает ID, сгенерированный при последнем INSERT-запросе.
mysql_list_dbs -- Возвращает список баз данных, доступных на сервере.
mysql_list_fields -- Возвращает список колонок таблицы.
mysql_list_processes -- Возвращает список процессов MySQL.
mysql_list_tables -- Возвращает список таблиц базы данных MySQL.
mysql_num_fields -- Возвращает количество полей результата запроса.
mysql_num_rows -- Возвращает количество рядов результата запроса.
mysql_pconnect -- Устанавливает постоянное соединение с сервером MySQL.
mysql_ping -- Проверяет соединение с сервером и пересоединяется при необходимости.
mysql_query -- Посылает запрос MySQL.
mysql_real_escape_string -- Экранирует специальные символы в строках для использования в
выражениях SQL.
mysql_result -- Возвращает данные результата запроса.
mysql_select_db -- Выбирает базу данных MySQL.
mysql_stat -- Возвращает текущий статус сервера.
mysql_tablename -- Возвращает имя таблицы, содержащей указанное поле.
mysql_thread_id -- Возвращает ID текущего потока.
mysql_unbuffered_query -- Посылает MySQL SQL-запрос без авто-обработки результата и её
буферизации.
Отметим, что для PHP существуют программы “билдеры” для ускорения процесса
разработки WEB-страниц, взаимодействующих с СУБД, например, PHP Report Maker.
26
Раздел 2. Основы технологии ASP.NET и ADO.NET
ASP.NET — технология создания WEB-приложений и WEB-сервисов от компании
Microsoft. Она является составной частью платформы Microsoft .NET и развитием более
старой технологии Microsoft ASP. На данный момент последней версией этой технологии
является ASP.NET 4.0b.
ASP.NET внешне во многом сохраняет схожесть с более старой технологией ASP, что
позволяет разработчикам относительно легко перейти на ASP.NET. В то же время внутреннее
устройство ASP.NET существенно отличается от ASP, поскольку она основана на платформе
.NET и, следовательно, использует все новые возможности, предоставляемые этой
платформой.
Хотя ASP.NET берёт своё название от старой технологии Microsoft ASP, она
значительно от неё отличается. Microsoft полностью перестроила ASP.NET, основываясь на
Common Language Runtime (CLR), который является основой всех приложений Microsoft
.NET. Разработчики могут писать код для ASP.NET, используя практически любые языки
программирования, в том числе, и входящие в комплект .NET Framework (C#, Visual
Basic.NET, и JScript .NET). ASP.NET имеет преимущество в скорости по сравнению со
скриптовыми технологиями, так как при первом обращении код компилируется и помещается
в специальный кэш, и впоследствии только исполняется, не требуя затрат времени на
парсинг, оптимизацию, и т. д.
Основа всего в Web-приложении – это страница. Пользователь, пользуясь браузером,
перемещается между страницами, периодически возвращаясь к уже просмотренным ранее
страницам, вводя какие-то данные в HTML формы и получая некоторый результат. В
ASP.NET страница чаще всего представляет собой Web-форму, содержащую различные
элементы управления, реагирующую на события, создаваемые пользователем.
ASP.NET 1.x позволяет разделять код логики от кода представления, то есть помещать
код программной логики страницы в файл .cs или .vb, отдельно от кода собственно страницы,
размещаемом в .aspx файле. Эта технология называется Code-Behind. Таким образом, дизайн
страницы может быть изменен не затрагивая кода страницы, что позволяет разделить
ответственность за внешний вид и работу страницы между дизайнером и программистом. Для
этого в .aspx файле можно задать параметры директивы Page.
<%@ Page Language="c#" Src="User.aspx.cs" %>
27
Но для поддержки редактирования с помощью Microsoft Visual Studio .NET в ASP.NET
странице необходимо указать класс, соответствующей данной странице и файл, в котором
находится код этого класса. Для этого директива Page преобразуется с использованием
ключевых слов Codebenind и Inherits.
<%@ Page Language="c#" Codebehind="TheProject.User" Inherits="User.aspx.cs" %>
В ASP.NET 2.0 используется иной механизм разделения кода. В директиве Page при этом
необходимо использовать другие ключевые слова: CodeFile и Inherits.
<%@ Page Language="c#" CodeFile="TheProject.User" Inherits="User.aspx.cs" %>
В этом случае код класса программной логики страницы будет размещен в файле указанном в
атрибуте CodeFile. Надо отметить, что Visual Studio использует разделяемые классы:
public partial class Default : System.Web.UI.Page{
sender, EventArgs e)
{
protected void Page_Load(object
}}
Поэтому разработчик может поместить код класса в нескольких файлах, но подобное
рассредоточение кода делает приложение весьма громоздким и трудным в поддержке и
разработке.
Используемая в Visual Studio модель Code-Behind обладает несколькими весьма
существенными недостатками. Прежде всего, используя Visual Studio разработчику
необходимо компилировать проект перед публикацией, поскольку ASP.NET компилирует
страницы, только если указан атрибут Src, не используемый Visual Studio. При этом,
поскольку среда ASP.NET обнаруживает изменение даты создания сборки, после каждой
замены старой сборки в каталоге bin происходит перезапуск домена приложения, что
выливается во временную «заторможенность» в работе приложения.
Visual Studio использует новые ключевые слова, поддерживаемые средой выполнения
ASP.NET 2.0, а среда выполнения, в свою очередь, использует новую технику компиляции
страниц. Это позволяет решить проблему замены сборки на более новую.
Несмотря на это, Visual Studio по-прежнему позволяет отказаться от разделения кода и
поместить код программной логики в самом файле страницы, и использовать теги <script
runat="server"></script>. Более того, по умолчанию Visual Studio создает именно страницы без
разделения кода.
В ASP.NET 2.0 среда выполнения также анализирует директивы Page, осуществляет
поиск сборки соответствующей классу логики страницы, после чего создается класс
страницы. В отличие от ASP.NET 1.x, родительским классом для класса страницы является
28
System.Web.UI.Page, поскольку создаваемый динамический класс является собственно
классом страницы (используются разделяемые классы для класса страницы и класса
программной логики), а не потомком класса программной логики. Поэтому, если в ASP.NET
1.x класс Web-формы мог называться также как и сама Web-форма.
<form id="frmDefault" runat="server"></form>…public class frmDefault :
System.Web.UI.Page{
protected void Page_Load(object sender, EventArgs e)
{
}}
В ASP.NET 2.0 это недопустимо, поскольку элемент управления System.Web.UI.Form
является элементом класса. Основным преимуществом ASP.NET является то, что в случае
отсутствия сборки, необходимой для выполнения страницы, происходит компиляция только
файла программной логики страницы, без перекомпиляции всей сборки.Поскольку
существует динамическая компиляция, то необходимо обеспечить возможность создавать
код, общий для всех страниц приложения. Для этой цели в ASP.NET 2.0 существуют
специальные директории, являющиеся дочерними директориями корневой директории
приложения, одна из которых App_Code, служит для хранения файлов, содержащих общий
код для всех страниц. При выполнении динамической компиляции, код из директории
App_Code компилируется и становится доступным для всех страниц Web-приложения. При
этом Visual Studio поддерживает код, находящийся в директории App_Code, поэтому работает
подсветка синтаксиса и IntelliSense.
Обратите внимание. Технология ASP.NET базируется на технологии ASP (хотя и меет
существенные отличия от последней).
Основные возможности ASP.NET.
Далее опишем основные возможности ASP.NET на примере наиболее популярного
языка программирования, Visual Basic.NET, поддерживаемого .NET.
Для организации вывода существует объект Response. Вывод осуществляется с
помощью метода Write.
<% Response.Write("<h2>Hello, world!</h2>") %>
Так производится запись во внутренний буфер объекта Response. Когда скрипт
заканчивает работу, весь буфер выдается клиенту. Надо заметить, что клиент получает
"чистый" HTML, таким образом, программы на ASP.NET не зависят от клиентского ПО, что
очень важно. Если внутри выводимой строки нужно использовать кавычку, кавычка
удваивается. Другие методы и свойства Response позволяют управлять выводом. Так
Response.Buffer регулирует, получает ли клиент данные по мере из записи в Response, или все
сразу по завершении исполнения страницы. Метод Response.Redirect перенаправляет браузер
29
на другую страницу. Чтобы им пользоваться, нельзя до него на странице использовать
Response.Write.
Программа на ASP.NET не может явно спросить пользователя о чем-то. Она
получает данные из других страниц, либо через URL. Передаваемые параметры
помещаются во входной поток и доступны через объект Request. Чтобы передать
переменную var в программу test.asp, надо написать:
test.asp?var=abc
Чтобы из программы получить значение этой переменной, надо написать:
var = Request("var")
Несколько переменных разделяется знаком &:
test.asp?var1=abc&var2=def
Кроме того, чтобы задавать параметры в URL, можно воспользоваться формами
HTML. В вызывающей странице пишем так:
<form method="get" action="test.asp">
<input type=text name="var1" value=" default">
<input type=hidden name="var2" value=" value2">
<input type=submit value="Submit Form">
</form>
Исходная форма имеет вид:
При этом пользователь увидит форму из одного поля ввода (var1), в нем будет
значение по умолчанию " default". Второе поле (var2) будет невидимо и будет
передавать всегда фиксированное значение " значение 2". Кнопка "Submit Form"
завершает заполнение формы и передает все переменные на test.asp (action).
Если
method="get",
переменные
передаются
через
URL:
test.asp?var1=default&var2=value2.
Если method="post", передаются вместе с запросом так, что внешне передача
переменных не заметна.
30
Отметим, что для поддержки ASP.NET, как правило, необходим Internet Information
Server и установленный Microft Net Framework. Это программная технология от компании
Microsoft, предназначенная для создания обычных программ и WEB-приложений.
Установка программного обеспечения начинается со скачивания дистрибутива .NET
Framework (с сайта Microsoft). ASP.NET распространяется как составная часть .NET
Framework. Перед установкой .NET Framework, необходимо установить Internet Information
Server (IIS), который, как правило, поставляется вместе с дистрибутивом Windows и
устанавливается
через
меню
«Пуск/Панель
управления/Установка
и
удаление
программ/Установка компонентов Windows».
Рис. 6. Инсталляция WEB-сервера IIS
Одной из основных идей Microsoft .NET является совместимость различных служб,
написанных на разных языках. Например, служба, написанная на C++ для Microsoft .NET,
может обратиться к методу класса из библиотеки, написанной на Delphi; на C# можно
написать класс, наследованный от класса, написанного на Visual Basic .NET, а исключение,
созданное методом, написанным на C#, может быть перехвачено и обработано в Delphi.
Каждая библиотека (сборка) в .NET имеет сведения о своей версии, что позволяет устранить
возможные конфликты между разными версиями сборок.
После установки .NET FrameForks, в Администраторе IIS можно постмотреть версию
ASP.NET и месторасположения конфигурационного файла (рис.7).
31
Рис. 7. Просмотр свойств ASP.NET после инсталляиции .Net Framework
Отметим, что файлы ASP.NET имеют, как правило, расширение «*.aspx».
Обратите внимание, что после установки Net Framework такие файлы обрабатываются в IIS с
помощью ISAPI фильтра – aspnet_isapi.dll (рис. 8).
Рис. 8. Просмотр ссылки на обработчик сценариев ASP.NET в Администраторе IIS.
Также для каждого виртуального каталога IIS можно создать единственный файл
global.asax, с помощью которого управлять поведением сайта в зависимости от событий,
связанных
с
поведением
пользователей
(например,
события
начала
и
окончания
пользовательской сессии).
Пример, файла global.asaх.
<SCRIPT LANGUAGE=VBScript RUNAT=Server>
'Sub Session_OnStart
'**Put your code here **
'End Sub
'EventName
'Session_OnStart
Description
Runs the first time a user runs any page in your application
32
'Session_OnEnd
'Application_OnStart
Runs when a user's session times out or quits your application
Runs once when the first page of your application is run for the first
time by any user
'Application_OnEnd
Runs once when the web server shuts down
Sub Session_OnStart
'Этот код выполняется при старте пользовательской сессии
End Sub
</SCRIPT>
Если на сервере установлены дополнительные компоненты, их можно
использовать из ASP.NET Стандартные объекты (например, из библиотек ADO
(Connection и Recordset) и Scripting (Dictionary, FileSystemObject)) доступны всегда.
Установка новой компоненты обычно состоит в копировании dll-файла в каталог на
сервере и ее регистрации с помощью программы regsvr32.exe.
Создать экземпляр объекта можно так:
Set var = Server.CreateObject("Class.Object")
Class.Object указываются в документации на компоненту.
В переменной var запоминается ссылка на созданный экземпляр объекта. Когда
объект не нужен, ссылку нужно обнулить с помощью команды:
Set var = Nothing
Отметим что для передачи данных между страницами, можно воспользоваться
механизмом сессий. ASP.NET, используя cookies, предоставляет программисту
специальное средство - объект Session (сессия). Сессия стартует, когда новый
пользователь обращается к любому aspx-файлу приложения. Сессия заканчивается при
отсутствии активности пользователя в течение, как правило, 20 минут. Специальный
объект Session хранит состояние сессии. Туда можно записывать переменные, которые
доступны из любой страницы в этой сессии.
Записать данные в этот объект можно следующим образом:
Session("var") = var
Для считывания значения можно использовать такую запись:
var = Session("var")
33
Наряду с объектом Session существует объект Application. Если сессия создается
для каждого нового пользователя, до Application существует в единственном
экземпляре, и может использоваться всеми страницами приложения.
Application("var") = var
var = Application("var")
Чередование ASP.NET/HTML
Если
нужно
выдать
большой
кусок
HTML,
можно
не
пользоваться
Response.Write. Если в asp-файле встречается кусок текста вне скобок <% %>, он
трактуется просто как HTML, который надо вывести. Пример:
<% If var="VAL" Then %>
Выполняется первый блок HTML-кода
…
<% Else %>
Выполняется другой блок HTML-кода
…
Обратите внимание. В ASP.NET в отличие от ASP, обязательно нужно объявлять тип
используемых переменных. Обычно это деляается вначале ASP.NET скрипта.
<%
Dim dbs As Object
Dim rs1 as Object
dbs = CreateObject("ADODB.Connection")
…………………………………………………..
%>
В противном случае выдается ошибка.
Отметим, что можно выносить повторяющийся код в отдельный файл, и подключать к
разным другим по мере необходимости с помощью команды include. Это весьма
удобно, если есть потребность вынести повторяющийся код в отдельный файл и
использовать многократно в разных страницах:
<!--#include file="filename.inc" -->
Вы можете использовать операторы цикла, такие как for и while.
34
<%
While (условие)
‘Здесь некоторый код на VB.NET
End While
for i=1 To J
‘Здесь некоторый код на VB.NET
Next i
%>
Отметим, что логические операторы также имеют довольно простую форму, например,
следующую.
IF Not VarType(rs3.Fields(3).Value)=1 Then
var_name=CStr(rs3.Fields(3).Value)
else
var_name=""
End if
В этом примере, функция VarType() проверят соответствие переменной определенному типу
по значению, и в зависимости, от результата, либо, считывает значение из СУБД, либо
записывает в переменную var_name пустое значение. Функция CStr выполняет приведение
текущего типа переменной к текстовому.
Для ASP.NET при работе с файловой системой целесообразно использовать
объектную модель FSO (File System Object).
Ниже представлен
пример создания файла на жестком диске с помощью
ASP.NET скрипта с последующей записей значений, извлекаемых из некоторой СУБД,
в формате XML.
<%
' rootPath – переменная, в которой храниться путь к папке, в которой создаем файл
‘rs2.Fields(2).Value – название файла (извлекаемое из СУБД)
fso = CreateObject("Scripting.FileSystemObject")
file = fso.CreateTextFile(rootPath+"\"+cStr(rs2.Fields(2).Value) + ".xml",true,true)
file.WriteLine("<anychart>")
35
file.WriteLine("<settings>")
file.WriteLine("<misc_settings use_embed_fonts_only='false' /> ")
‘Здесь некторый блок кода, формирующий XML-поток
file.WriteLine("</anychart>")
file.Close
Из ASP.NET можно легко и просто работать с любыми СУБД. Это делается
через две промежуточные технологии: ODBC и ADO (ADO.NET).
ODBC позволяет организовать доступ к любым СУБД через унифицированный
интерфейс с помощью языка SQL. Специфика конкретных СУБД учитывается при
помощи специальных драйверов БД. Такие драйверы существуют для всевозможных
СУБД (в частности SQL Server, Oracle, Access, FoxPro). Поддержка ODBC
обеспечивается на уровне операционной системы Windows. Настройка – через Панель
управления/ODBC.
Рис. 9. Настройка источников данных ODBC.
Базовым понятием является источник данных или data source. Источник данных
– это совокупность сведений о базе данных, включая ее драйвер, имя компьютера и
файла, параметры. Чтобы воспользоваться базой, необходимо создать источник
данных для нее. Важно, чтобы источник данных был "системным", в отличии от
"пользовательского". После этого надо лишь знать имя источника данных.
36
ADO – это совокупность объектов, доступных из ASP.NET (ASP), позволяющих
обращаться к источнику данных ODBC (или OLE DB). Фактически нужны лишь 2
объекта – Connection, представляющий соединение с базой данных и Recordset,
представляющий набор записей, полученный от источника. Сначала необходимо
открыть соединение, потом к нему привязать Recordset, потом, пользуясь методами
Recordset, обрабатывать данные.
Пример 1. Доступ к СУБД через имя источника ("Data-Source-Name"),
настроенного в Администраторе источников ODBC
Dim Conn, RS, strSQL, strOut
strOut = ""
Set Conn = Server.CreateObject("ADODB.Connection")
Conn.Open "Data-Source-Name"
Set RS = Server.CreateObject("ADODB.Recordset")
strSQL = "SELECT * FROM AGENTS ORDER BY USER_ID"
RS.Open strSQL, Conn
RS.MoveFirst
strOut = strOut & "<P>Here is the data:"
strOut = strOut & "<TABLE BORDER=""1"">"
strOut = strOut & "<TR><TH>USER_ID</TH><TH>Name</TH></TR>"
Do While Not RS.EOF
strOut = strOut & "<TR>"
strOut = strOut & "<TD>" & RS.Fields("USER_ID") & "</TD>"
strOut = strOut & "<TD>" & RS.Fields("NAME") & "</TD>"
strOut = strOut & "</TR>"
RS.MoveNext
Loop
strOut = strOut & "</TABLE>"
strOut = strOut & "<HR>"
strOut = strOut & "That's it!"
RS.Close
Set RS = Nothing
Conn.Close
37
Set Conn = Nothing
Response.Write strOut
%>
Пример 2. Доступ к СУБД через имя драйвера (на примере MS SQL Server).
dbs = CreateObject("ADODB.Connection")
dbs.ConnectionString = "driver={SQL
Server};server=.\SQLEXPRESS;uid=sa;pwd=;database=GRAF"
dbs.ConnectionTimeout = 5
dbs.Open
dbs.CommandTimeout = 0
Отметим, что в настоящее время для ASP.NET рекомендуется также
использовать
объектную
модель
ADO.NET,
существенно
отличающуюся
от
объектной модели ADO.
ADO.NET поддерживает модель поставщиков. Поставщики для конкретного
источника данных можно определить как совокупность классов в одном пространстве
имен созданных специально для данного источника данных. Эта особенность
несколько размыта для источников данных OleDb, ODBC, так как они по своей сути
созданы для работы с любой базой данных совместимых с OLE и ODBC.
В подключаемой части ADO.NET имеются следующие основные классы
подсоединенных объектов:

Connection. Этот класс, позволяющий устанавливать подключение к источнику
данных. ( OleDbConnection, SqlConnection, OracleConnection)

Transaction. Объект транзакций (OleDbTransaction, SqlTransaction, OracleTransaction. В
ADO.NET имеется пространство имен System.Transaction)

DataAdapter. Это своеобразный шлюз между автономными и подключенными
аспектами ADO.NET. Он устанавливает подключение, и если подключение уже
установлено, содержит достаточно информации, чтобы воспринимать данные
автономных объектов и взаимодействовать с базой данных. (DataAdapter SqlDataAdapter, OracleDataAdapter)

Command. Это класс представляющий исполняемую команду в базовом источнике
данных.

Parameter. Объект параметр команды.
38

DataReader. Это эквивалент конвейерного курсора с возможностью только чтения
данных в прямом направлении.
Объектная модель ADO.NET
Рис. 10. Объектная модель ADO.NET.
Обратите внимание. Для использования ADO.NET в ASP.NET нужно вначале
импортировать соответствующее пространство имен.
<% 'ДЛЯ ADO Managed Provider %>
<%@ Import Namespace="System.Data" %>
<%@ Import Namespace="System.Data.ADO" %>
<% 'ДЛЯ SQL Managed Provider %>
<%@ Import Namespace="System.Data" %>
<%@ Import Namespace="System.Data.SQL" %>
Пример 3. Подключение к СУБД Access, считывание данных при помощи
ADO.NET и вывод на WEB-страницу
<%@ Import Namespace="System.Data" %>
<%@ Import Namespace="System.Data.ADO" %>
<%
'путь к бд и имя таблицы для выполнения запроса
Dim DBFileName As String = "db\db.mdb"
Dim DBTableName As String = "[TableName]"
'инициализируем объекты для работы с бд
Dim cn As New OleDb.OleDbConnection("Provider=Microsoft.Jet.OLEDB.4.0;Data
39
Source=" & DBFileName)
Dim cmd As New OleDb.OleDbCommand("SELECT * FROM " & DBTableName, cn)
Dim da As New OleDb.OleDbDataAdapter(cmd)
Dim tbl As New DataTable
'заполняем набор данных
da.Fill(tbl)
'выводим данные
For Each Row As DataRow In tbl.Rows
Response.Write(Join$(Row.ItemArray())+"<BR>")
Next Row
'освобождаем ресурсы
tbl.Dispose()
da.Dispose()
cmd.Dispose()
cn.Dispose()
%>
40
Раздел
3.
Разработка
приложений
для
WEB
с
использованием MySQL
MySQL Server относиться к классу реляционных СУБД, максимально адаптированных
для WEB-разработки и отличается расширенной функциональностью (возможность хранения
данных
терабайтного
объема,
поддержка
хранимых
процедур
и
триггеров,
кроссплатформенность и т.д.) и вместе с тем относится к технологиям класса open source
(открытого кода), т.е. не требует лицензирования и является свободно распространяемой
СУБД.
Кроссплатформенная СУБД MySQL. (официально произносится, «май-эс-кью-эль») —
бесплатно распространяемая система управления базами данных (СУБД). MySQL является
собственностью компании Sun Microsystems, осуществляющей разработку и поддержку
приложения. Распространяется под GNU General Public License и под собственной
коммерческой лицензией, на выбор. Помимо этого компания MySQL AB разрабатывает
функциональность по заказу лицензионных пользователей, именно благодаря такому заказу
почти в самых ранних версиях появился механизм репликации. MySQL портирована на
большое количество платформ: AIX, BSDi, FreeBSD, HP-UX, GNU/Linux, Mac OS X, NetBSD,
OpenBSD, OS/2 Warp, SGI IRIX, Solaris, SunOS, SCO OpenServer, SCO UnixWare, Tru64,
Windows 95, Windows 98, Windows NT, Windows 2000, Windows XP, Windows Server 2003,
Windows Vista и Windows 7. Существует также порт MySQL к OpenVMS. Важно отметить,
что компания MySQL AB предоставляет для свободной загрузки не только исходные коды
СУБД, но и откомпилированные и оптимизированные под конкретные операционные
системы готовые исполняемые модули. MySQL имеет API для языков Delphi, C, C++, Эйфель,
Java, Лисп, Perl, PHP, Python, Ruby, Smalltalk и Tcl, библиотеки для языков платформы .NET,
а также обеспечивает поддержку для ODBC посредством ODBC-драйвера MyODBC.
Отметим, что максимальный объем Хранилища MySQL, начиная с версии 3.23+ : до 8
миллионов терабайт. (2 ^ 63).
MySQL разработал Михаэль Видениус (Michael Widenius, monty@analytikerna.se).
MySQL является относительно небольшой и быстрой реляционной СУБД основанной
на традициях Hughes Technologies Mini SQL (mSQL).
Последнюю версию MySQL можно скачать с www.tcx.se.
Важнейшие преимущества СУБД MySQL.

Кроссплатформенность (возможность инсталляции на различные операционные
системы, в том числе Windows и Unix).
41

Многопоточность. Поддержка нескольких одновременных запросов.

Оптимизация связей с присоединением многих данных за один проход.

Записи фиксированной и переменной длины.

ODBC драйвер в комплекте с исходником.

Гибкая система привилегий и паролей.

До 16 ключей в таблице. Каждый ключ может иметь до 15 полей.

Поддержка ключевых полей и специальных полей в операторе CREATE.

Поддержка чисел длинной от 1 до 4 байт (ints, float, double, fixed), строк
переменной длины и меток времени.

Интерфейс с языками PHP, .NET, C, perl и др.

Основанная на потоках, быстрая система памяти.

Утилита проверки и ремонта таблицы ( isamchk).

Все данные хранятся в формате ISO8859_1.

Все операции работы со строками не обращают внимания на регистр символов
в обрабатываемых строках.

Псевдонимы применимы как к таблицам, так и к отдельным колонкам в
таблице.

Все поля имеют значение по умолчанию. INSERT можно использовать на
любом подмножестве полей.

Легкость управления таблицей, включая добавление и удаление ключей и
полей.
Интерфейсы с другими языка программирования
Наиболее простой способ работы с MySQL сводится к использованию программы
MySQL. Это клиентская часть СУБД MySQL. Можно выполнять команды SQL
непосредственно из командной строки системы unix или из интерактивного режима
MySQL. Подробнее о клиентских программах.
СУБД MySQL имеет библиотеку C API. Ее можно использовать для запросов к
базе данных, вставки данных, создания таблиц и т.п. C API поддерживает все функции
MySQL.
Язык perl поддерживается сразу двумя способами:

Портирован интерфейс с perl из mini-SQL, разработанный Андреасом Коенигом
(Andreas Koenig a.koenig@mind.de ).

Есть модуль perl DBD
Также доступен 32-битный ODBC драйвер для MySQL. Он позволяет
запрашивать и получать данные из других источников с поддержкой ODBC. С
42
подробностями можно ознакомиться на домашней страничке MySQL (увы, только на
английском языке).
Важнейшим преимуществом MySQL является возможность бесшовной (native)
интеграции с языком программирования PHP.
В этом примере показано как в PHP легко обрабатывать данные с HTML – форм.
Создадим простой HTML файл.
<HTML>
<HEAD>
<TITLE>Запрос информации</TITLE>
<BODY>
<CENTER>
Хотите больше знать о наших товарах?
<P>
<TABLE WIDTH = 400><TR><TD align = right>
<FORM ACTION="email.php3" METHOD="POST">
Ваше имя:<BR>
<INPUT TYPE="text" NAME="name" SIZE="20" MAXLENGTH="30">
<P>
Ваш email:<BR>
<INPUT TYPE="text" NAME="email" SIZE="20" MAXLENGTH="30">
<P>
Меня интересуют:
<SELECT NAME="preference">
<OPTION value = "Яблоки">Яблоки
<OPTION value = "Апельсины">Апельсины
</SELECT>
<P>
<INPUT TYPE="submit" VALUE="Отправить запрос!">
</FORM>
</TD></TR></TABLE></CENTER>
43
</BODY>
</HTML>
Назовем этот файл request.html. В нем мы указали, что данные формы будут
обрабатываться файлом email.php3. Приведем его содержание:
<?
/* Этот скрипт получает переменные из request.html */
PRINT "<CENTER>";
PRINT "Привет, $name.";
PRINT "<BR><BR>";
PRINT "Спасибо за ваш интерес.<BR><BR>";
PRINT "Вас интересуют $preference. Информацию о них мы пошлем вам на email:
$email.";
PRINT "</CENTER>";
?>
Теперь, если пользователь вызовет request.html и наберет в форме имя “Вася”,
email: vasya@pupkin.com и скажет, что его интересуют “Яблоки”, а после этого
нажмет "Отправить запрос!", то в ответ вызовется email.php3, который выведет на
экран примерно следующее:
Привет, Вася
Спасибо за ваш интерес.
Вас интересуют Яблоки. Информацию о них мы пошлем вам на email:
vasya@pupkin.com
Теперь мы должны сдержать обещание и выслать email.
Для этого в PHP есть функция MAIL.
Синтаксис: void mail(string to, string subject, string message, string add_headers);
to – email адрес получателя.
subject – тема письма.
message – собственно текст сообщения.
add_headers – другие параметры заголовка письма (необязательный параметр).
Допишем в конец файла email.php3 следующий код:
44
<?
mail($email, "Запрос на информацию", "$name\n
Спасибо за ваш интерес!\n
Вас интересуют $preference\n
Мы их распространяем бесплатно. Обратитесь в ближайший филиал нашей компании
и получите ящик этого продукта.\n
");
mail("administration@me.com",
"Был запрос на информацию.",
"$name интересовали $preference\n
email-адрес: $email. \n");
?>
Вот теперь пользователь будет получать письмо с более подробной
информацией о наших товарах. Также письмо получит и администратор сайта.
Когда интересующихся нашими товарами станет очень много, мы захотим их как-то
упорядочить и хранить информацию о них в базе данных. Об этом в следующем
примере.
Работа с MySQL (сохранение данных в базе данных).
Для начала создаем базу данных и таблицу. Входим в MySQL, и выполняем команды:
>CREATE DATABASE products;
>CREATE TABLE clients (name VARCHAR(25), email VARCHAR(25), choise
VARCHAR(8));
Для общения с MySQL из PHP понадобятся следующие функции.
int mysql_connect(string hostname, string username, string password);
Создать соединение с MySQL.
Параметры:
Hostname – имя хоста, на котором находится СУБД.
Username – имя пользователя.
Password – пароль пользователя.
Функция возвращает параметр типа int, который больше 0, если соединение прошло
успешно, и равен 0 в противном случае.
int mysql_select_db(string database_name, int link_identifier);
Выбрать базу данных для работы.
45
Параметры:
Database_name – имя базы данных.
link_identifier – ID соединения, которое получено в функции mysql_connect. (параметр
необязательный, если он не указывается, то используется ID от последнего вызова
mysql_connect)
Функция возвращает значение true или false
int mysql_query(string query, int link_identifier);
Функция выполняет запрос к базе данных.
Параметры:
Query – строка, содержащая запрос
link_identifier – см. предыдущую функцию.
Функция возвращает ID результата или 0, если произошла ошибка.
int mysql_close(int link_identifier);
Функция закрывает соединение с MySQL.
Параметры:
link_identifier – см. выше.
Функция возвращает значение true или false
Теперь наш файл email.php3 будет иметь след. вид:
<?
/* Этот скрипт получает переменные из request.html */
/* Некоторые переменные */
$hostname = "localhost";
$username = "myusername";
$password = "mypassword";
$dbName = "products";
/* Таблица MySQL, в которой хранятся данные */
$userstable = "clients";
/* email администратора */
46
$adminaddress = "administration@me.com";
/* создать соединение */
MYSQL_CONNECT($hostname,$username,$password) OR DIE("Не могу создать
соединение ");
@mysql_select_db("$dbName") or die("Не могу выбрать базу данных ");
PRINT "<CENTER>";
PRINT "Привет, $name.";
PRINT "<BR><BR>";
PRINT "Спасибо за ваш интерес.<BR><BR>";
PRINT "Вас интересуют $preference. Информацию о них мы пошлем вам на email:
$email.";
PRINT "</CENTER>";
/* Отправляем email */
mail($email, "Запрос на информацию", "$namen\n
Спасибо за ваш интерес!\n
Вас интересуют $preference\n
Мы их распространяем бесплатно. Обратитесь в ближайший филиал нашей компании
и получите ящик этого продукта.\n
");
mail("administration@me.com",
"Был запрос на информацию.",
"$name интересовали $preference\n
email-адрес: $email. \n");
/* Вставить информацию о клиенте в таблицу */
$query = "INSERT INTO $userstable VALUES('$name','$email', '$preference')";
$result = MYSQL_QUERY($query);
47
PRINT "Информация о вас занесена в базу данных.";
/* Закрыть соединение */
MYSQL_CLOSE();
?>
Вот так легко можно работать с базой данных в PHP. Теперь кроме письменных
уведомлений, информация о клиенте и его интересах будет заносится в таблицу
MySQL.
Работа с MySQL (получение данных из базы данных).
После занесения данных, нас иногда будет интересовать вопрос так кого же из
наших клиентов интересует товар “Яблоки” (не путать с Apple Macintosh).
Напишем скрипт apple.php3
<?/* Скрипт показывает клиентов, которые яблоки любят больше чем апельсины */
$hostname = "localhost";
$username = "myusername";
$password = "mypassword";
$dbName = "products";
/* Таблица MySQL, в которой хранятся данные */
$userstable = "clients";
/* создать соединение */
MYSQL_CONNECT($hostname,$username,$password) OR DIE("Не могу создать
соединение ");
@mysql_select_db("$dbName") or die("Не могу выбрать базу данных ");
/* Выбрать всех клиентов - яблочников */
$query = "SELECT * FROM $userstable WHERE choice = 'Яблоки'";
48
$result = MYSQL_QUERY($query);
/* Как много нашлось таких */
$number = MYSQL_NUMROWS($result);
/* Напечатать всех в красивом виде*/
$i = 0;
IF ($number == 0) {
PRINT "<CENTER><P>Любителей яблок нет</CENTER>";
} ELSEIF ($number > 0) {
PRINT "<CENTER><P>Количество любителей яблок: $number<BR><BR>";
WHILE ($i < $number){
$name = mysql_result($result,$i,"name");
$email = mysql_result($result,$i,"email");
PRINT "Клиент $name любит Яблоки.<BR>";
PRINT "Его Email: $email.";
PRINT "<BR><BR>";
$i++;
}
PRINT "</CENTER>";
}
?>
Здесь мы использовали две новых функции:
int mysql_num_rows(int result);
Функция возвращает количество строк в результате запроса.
Параметр result – содержит ID результата запроса.
int mysql_result(int result, int i, column);
Функция возвращает значение поля в столбце column и в строке i.
Таблица 2. Функциональные возможности различных версий СУБД MySQL
Возможность
Версия MySQL
49
Возможность
Версия MySQL
Подзапросы
4.1
Внешние ключи
5.0 (3.23 с InnoDB)
Представления
5.0
Хранимые процедуры
5.0
Триггеры
5.0
Объединения
4.0
Полные связи
4.1
Ограничения
4.1 или 5.0
Курсоры
4.1 или 5.0
R-деревья
4.1 (для таблиц MyISAM)
Наследование таблиц
Не планируется
Расширяемая система типов
Не планируется
В настоящее время существуют различные средства визуального проектирования и
администрирования для СУБД MySQL, среди которых, можно выделить систему EMS SQL
Manager for MySQL (http://www.sqlmanager.net/).
Данная система позволяет работать с СУБД MySQL, используя визуальные средства
проектирования (рис. 11).
50
Рис. 11. Интерфейс EMS SQL Manager for MySQL.
EMS SQL Manager for MySQL – это высокопроизводительная программа для
разработки и администрирования серверов баз данных MySQL. SQL Manager for MySQL
работает с любыми версиями MySQL, начиная с версии 3.23 поддерживает все самые новые
функции MySQL, включая триггеры, представления, хранимые процедуры и функции,
внешние ключи для таблиц InnoDB, UNICODE данные и другие. SQL Manager for MySQL
позволяет быстро и просто создавать и редактировать все объекты баз данных MySQL,
визуально проектировать базы данных MySQL, выполнять сценарии SQL, импортировать и
экспортировать базы данных MySQL, управлять пользователями и их привилегиями, а также
предоставляет множество полезных инструментов для эффективного администрирования
MySQL. Современный графический интерфейс и грамотная система мастеров настроек
предельно просты и будут понятны даже начинающему пользователю
Ключевые особенности
1. Полная совместимость со всеми версиями MySQL, начиная с 3.23 по 6.0
включительно.
2. Поддержка данных UTF8.
3. Быстрая навигация и управление СУБД.
4. Элементарное управление всеми объектами MySQL.
5. Эффективные инструменты управления данными .
6. Эффективное управление параметрами безопасности.
7. Великолепные графические и текстовые инструменты для построения запросов.
8. Впечатляющие возможности импорта и экспорта данных.
9. Конструктор отчетов с понятным мастером создания отчетов.
51
10. Мощный визуальный конструктор баз данных.
11. Удобные мастера для выполнения сервисов MySQL.
12. Доступ к серверу MySQL по HTTP протоколу HTTP туннелю.
13. Доступ к серверу MySQL по HTTP протоколу SSH туннелю.
14. К примеру, с помощью EMS SQL Manager for MySQL можно проектировать триггеры,
хранимые процедуры и пр. для MySQL (рис. 12).
Рис. 12. Создание триггера для таблицы MySQL
В данном примере (рис. 12), триггер выполняется каждый раз после вставки очередной
записи в таблицу «period». При этом, выполняется запрос к другим таблицам СУБД (таблица
«exec», поля ID_Exec, ID_Norg) и осуществляется вставка всех найденных строк в таблицу
«status_form», в том числе, новых значений первичного ключа NEW.ID_Per таблицы
«period».
Пример триггера для MySQL
BEGIN
DECLARE done INT DEFAULT 0;
DECLARE a,b INT;
DECLARE cur CURSOR FOR SELECT ID_Exec, ID_Norg FROM exec;
DECLARE CONTINUE HANDLER FOR SQLSTATE '02000' SET done = 1;
OPEN cur;
REPEAT
FETCH cur INTO a, b;
IF NOT done THEN
52
INSERT INTO status_form (ID_Per,ID_Norg,ID_Exec) VALUES (NEW.ID_Per,b,a);
END IF;
UNTIL done END REPEAT;
CLOSE cur;
END
Обратите внимание.
1. на механизм открытия и использования курсоров:
OPEN cur;
REPEAT
FETCH cur INTO a, b;
IF NOT done THEN
INSERT INTO status_form (ID_Per,ID_Norg,ID_Exec) VALUES
(NEW.ID_Per,b,a);
END IF;
UNTIL done END REPEAT;
2. на метод обращения к значениям полей, соответствующим новым строкам таблицы,
для которой создан триггер.
NEW.[Имя столбца таблицы]
Отметим, что аналогичным образом проектируются хранимые процедуры для
MySQL. Только вызов таких процедур, в отличие от триггеров, осуществляется явным
образом. При этом, при вызове хранимой процедуры, возможная динамическая передача
некоторых параметров.
53
Download