Теория и практика построения баз данных (1088289), страница 125
Текст из файла (страница 125)
Ничто, разумеется, не запрещает ччеЬ-серверу и СУБД находиться на одной машине. Объектная модель АРО Объектная модель АРО, показанная на рис. 15.8, является надстройкой к объектной модели ОСЕ РВ. Соединение (объект СопвесВоп) — зто первый объект АРО, который необходимо создать и который является основой для всех остальных. Из соединения разработчик может созлать один пли несколько наборов записей (объект Ресогг15е1) и одну или несколько команд (объект Соввапг1). Все ошибки, которые генерируются в процессе создания любого из этих объектов и работы с ним, АРО будет помешать в специальную коллекцию Еггогк Каждый объект Ресогг)5ег имеет коллекшгю полей (ЛеЫз); каждое поле (объект НеЫ) в этой коллекции соответствует столбцу в наборе записей, Кроме того, каждая команда имеет коллекцию параметров (Рагавегегз), элементы которой представляют переданные команде параьгетры.
А00 577 Таблица 18.1. Константы А00 Знвчвнив Имя константы Уроввнь изоляции 256 4096 65556 1048576 вбХвс1йввбцасапнпщеб вбХвс1йввбСаввгвеб вбХвс1йврва1ащейевб абХвс16впа1авще «Грязное чтение Завершенное чтение Воспроизводимое чтение Свриализуемасть Значение Имя константы Тип курсора вборепЕаачвгбсп!у вбОрепКеузв1 вборвпоупвпис вборап61внс Последовательный Ключевой Динамический Статический Значение Имя константы тип блокировки Только чтение абьасийввбоп~у абьасирвзавьзас абьасКОрппнзбс вбВв1сисрвванс Пессимистическая блокировка Оптимистическая блокировка Оптимистическая блокировка с массовыми абнавлвниями Рис.
15.8. Объектная модель АОО 576 Глава 15. 00ВС, ОСЕ 0В, А00 и АВР Объект Соппесбгоп Следующие операторы УВЯспрг, запущенные из тчеЬ-страницы, создают объект-со- единение Соппесйоп. После их выполнения переменная оЬ)Сопп будет указывать на объект, связанный с источником данных ОПВС под названием Ч[ечгйЫде55: «д 01 оЬдСопп 5ег оЬ1Сопп = 5егчег.СгеагеОЬ)есд ("АОООВ.СоппесЬ1оп") оЬ)Сопп.[зо1а11опЕече1 - абХастйеебСогип111еб ' иснользуеи АООЧВ5 оЬ1Сопп.Ореп "Ч1еий1бде55", >аа" ' открыеаеи соединение 3> В этом фрагменте кода оператор 5егчег.Сгеа1еОЬ)ест вызывает метод СгеагеОЬ)ес1 АЯР-объекта 5егчег. Тип объекта, здесь АОООВ.Соппесбоп, передается в качестве параметра.
После выполнения этого оператора переменная оЬ)Сопп указывает на новый объект Соппесбоп. Далее для этого соединения устанавливается уровень изоляции с помощью константы из файла АООЧВ5. Данный файл можно сделать доступным для сценария с помощью следующего оператора: «!--Ф1пс1нбе чдгтиа1 = "Ч1еий1бдеЕхайр1е[7АООЧВ5.1пс-->" Этот оператор должен быть в АБР-файгле, но вне скобок то...'й». Чтобы он сработал, вы должны скопировать файл АООЧВ5лпс в свой каталог (найдите файл с помощью команды 5еагсЬ (Найти) в главном меню Ъ'[пг[оччз).
Также следует поменять имя виртуальной папки, если оно у вас отличается от Ч[ечгйЫдеЕхавр[е1. Имена и значения важных констант АООЧВ5 перечислены в табл. 15.[. Использование имен констант вместо их значений делает ваш код более удобочитаемым. Это также облегчает адаптацию кода, если М[сгозо(1 вдруг изменит смысл этих значений (что маловероятно, но все-таки возможно). Последний оператор открывает источник данных О[)ВС, вызывая метод Орел объекта Соппесбоп.
Ему в качестве параметра передается имя пользователя за. Если бы требовался пароль, он был бы следующим параметром Понятно, что безопасность здесь никудышная, хотя все не так плохо, как кажется на первый взгляд, поскольку код будет выполняться на лчеЬ-сервере и никогда не будет пересылаться по сети. Тем не менее, лучше было бы запрашивать имя пользователя и пароль непосредственно на этапе выполнения, Этот вопрос, однако, не связан напрямую с обработкой баз данных, и мы не будем углубляться в его обсуждение.
Итак, мн установили соединение с СУБД через источник данных ОПВС, и база данных открыта. С помощью указателя оЬ)Сопп можно обрагцаться ко всем остальным методам объекта Соппесбоп (см. рис. 15.8), вклгочая методы создания и использования объектов йесогб5е1 и Соввапб. Кроме того, через этот указатель можно работать с коллекцией Епогж Объект йесогд8еФ Имея соединение с открытой базой данных, создаднм объект йесогб5ег (здесь и далее символы «чь н '!ь будут спускаться, но все приведенные ниже примеры должны полгещаться между ними, иначе код не будет выполняться на ччеЬ-сервере): 01ги оьдйесогб.
чаг5111 чаг50Е = "5ЕЕЕСТ * ЕЙОМ АВТ!5Т" 5ег аЬ1йесагб5ед = 5егчег.СгеабеОЬдесг ["АОООВ.йесогб5ег") оЬ)йесогб5еЕ.СигзогТуре = абОреп5таЬтс оЬ)йесогб5ес.ЕосЕТуре - абЕоскйеабдп1у оЬзйЕСОГб5е1,0реп чаг5п1. оЬ)Сопп 578 Глава 15. 00ВС, ОСЕ 0В, А00 и АЯР А00 579 Тип курсора (свойство СагвогТуре) и тип блокировки (свойство СоскТуре) могут также передаваться в качестве параметров методу ореп, как показано здесь: 01ж оЬайесога, чвг5О1 чаг5ОС = "5ЕСЕСТ * ЕВОИ АКТ!5Т 5еС оь)йесогб5еС - 5егчег,СгевтеОЬбесС !"АОООВ.Ресога5еС") оЬОВесога5еС.Орел чаг5О1, оь)сопл, аабреп5СаСтс.
ааьосййеаабп1у Так или иначе, зти операторы приводят к выполнению 501.-оператора, записанного в переменной чаг5т)1, с использованием курсора, являющегося статическим и предназначенного только для чтения. Все столбцы таблицы АйТ!5Т будут представлены полями в наборе записей. Если бы в операторе 5Е! ЕСТ были указаны только два столбца, например 5ЕСЕСТ АтС!вС!О, ИаС!опа!!Су ЕЙОМ АЯТ15Т, тогда только эти два столбца были бы включены в качестве полей в набор записей. Между прочим, в 5Я!. 5егчег, если имя таблицы имеет пробелы или другие необычные символы либо является зарезервированным словом 5ЯТ., оно заключается в квадратные скобки. Однако Огас1е не воспринимает имена таблцц в квадратных скобках: вместо этого нестандартные имена следует заключать в кавычки. Таким образом, если в вашей базе данных есть такие таблицы, вам придется писать различный код в зависимости от того, чью базу данных вы используете— Огас1е или 5О1 Вегчег.
Коллекция НеЫа При создании набора записей создается экземпляр коллекции ЯеЫв, Работать с этой коллекцией позволяет следующий код: 01ж чаг!. чагиыжсо1в, оь)Г1е1О чагножсо)в = оь)песога5еС.Г1е1ав.соопС Гог чвг! = 0 Со чвгныжсо1в - ! 5еС оь)Г1е1О = оодйесога5еС.Е)е1ав(чаг!) ' теперь оЬОЕте1Ь.Иаже содержит иия поля, ' а оЬОГте1О.Ча1ие содержит его значение ' здесь кожно выполнять с ниии некоторые действия Ивхт Во втором операторе в переменную чатИап)со)в записывается количество столбцов в наборе записей, для чего считывается значение свойства СоипС коллекции Г!еЫв.
Затем идет цикл, в котором перебираются элементы коллекции. Свойство Е!е!бв(О) указывает на первый столбец набора строк, поэтому переменная цикла пробегает значения от 0 до Сопит - 1. С самим объектами-полялти в этом примере никаких действий не производится. В реальном приложении имя поля можно определить с помощью свойства оь)яеЫ.Иаюе, а значение поля — с помощью свойства оЬ) ЯеЫ;ча!ые, В следующих примерах вы увидите, как это делается. Коллекция Еггога Всякий раз, когда происходит ошибка, АТ)0 создает экземпляр коллекции Епопь Это должна быть именна коллекция, поскольку адин оператор АТ)0 может вы- звать несколько ошибок.
Эту коллекцию можно обрабатывать тем же способам, чта и коллекции Е!е!бв 01ж чвг1, чагЕггогСоипС. оь)Еггог Оп Еггог йевыже Иехс чвгЕггогСоыпС - оЬОСопп.Еггогв.СоыпС !Т чагЕггогСоыпС > 0 Тьеп Еог чвг! - 0 Со чвгИыжсо1в - ! 5еС оь)Еггог - оЬОСопп.Еггогв(чаг1) ' теперь оЬОЕггог.ОевсгтрС1оп содержит ' описание ошибки ИехС Епа !Т В цикле объектному указателю оЬ) Еггог присваиваются значения оЬ)сопл. Еггогв(чат!).
Обратите внимание, что эта коллекция принадлежит соединению (оЬ)Сопл), а не набору записей (оь)йесогб5еС). Свойство Оевспреоп объекта Еггог можно использовать для возвращения пользователю сообтцения об ошибке. К сожалению, чтВ5сг!рс имеет очень ограниченные возможности для обработки ошибок.
Код проверки ошибок (начинающийся с Оп Ецог Ревыще ИехС) необходимо полтещать после каждого оператора АТ)О. который может вызвать ошибк . ак как это »!ожет вызвать нежелательное увеличение объема кода, лучше было бы написать функцию обработки ошибок и вызывать ее после каждого вызова объекта ЛЕ)О. Объект Соттапс! АПО- -объект Сопнпапб используется для запуска запросов и хранимых процедур, находятцихся в базе данных. Коллекция Ратап)етегв объекта Сопнпапб предназначена для передачи параметров, Предположим, например, что в базе данных, соединение с которой мы установили в оь)сапа, имеется хранимая процедура Е!пбАтС!вС, принимающая один параметр — национальность художников, данные о которых нужно предоставить.
Следутощий код вызывает эту процедуру с параметром «5рап1ьь» и создает набор записей оЬ)йв, в который помещаются результаты ее выполнения. Оив оь)сопя)апа оь1Рвгаж оЬ)йв Создаем Объект Со-впб соединяем его с ОЬДСопп и задаеи его Фориат 5еС оь1совоапа = 5егчег.СгеасеоЬбесС("АОООВ.сслявпа") 5еС оьтсожжвпа.дсстчесоппесС!оп = оЬОСопп оь)соптапа.сожжвпОТехС " "(са11 Е1падгствС (?))" задаен значение парвнетра 5еС оь)Рвгвж = оь)совтлапа СгеаСеРвгажеСег !"ИаС)опв1тСу", ааслаг, абРагвв)!приС, 25) оьтсопипапб.рвгая)есегв.древа оЬОРагвж Примеры использования А00 881 оЬ)Рагаю.Ча1ое = "5рап1зб" ' запускаен краниную пронедуру 5ег оЬОВв = оЬ)СопюапО.Екесоге 5ет 5еввтоп!"аЬс") = "Нонзегв" лподатт««н»«Ф 880 Глава 15.
00ВС, ОСЕ ОВ, АРО и АВР В этом примере сначала создается объект типа АОООВ.соптглапб, затем для него указывается активное соединение — оЬ)Сопл. Далее в свойстве СотптапбТек1 задается формат вызова хранимой процедуры. Это свойство используется для указания имени хранимой процедуры и количества ее параметров. Параметр обозначается знаком вопроса. Если бы было три параметра, текст команды был бы 1са!! Р!пбАгевг(?,?,?~. Далее создается объект Раташе1ет.
Константы абСЬаг и абРатапт1прос взяты из АООЧВ5 и указывают на то, что параметр имеет тип сйаг и что он является для процедуры входным. Максимальная длина параметра установлена равной 25 символам. Создав параметр, его необходимо присоединить к команде, для чего служит метод Аррепб. Наконец, с помощью метода Ехесо!е происходит вызов хранимой процедуры. Итак, мы создали набор записей оЬ)йв, содержащий результаты выполнения хранимой процедуры, Примеры использования АОО Следующие пять примеров показывают, как вызывать АРО из УВ5сг!рс с помощью АБР. Упор в них делается на использование АЕ)О, а не на график, внешний вид или последовательность действий.