Рекомендуется: ASP 3.0 Advanced Programming (двенадцать) 4.2.3 Примеры серверных инструкций, содержащих инструкции. Откройте подкаталог образца веб -страницы Глава 04, отображая директивы SSI и объект ASP Server & RDQU
9.2.3 Хранилированные процедурыИспользование хранимых процедур - это область, в которой применяются объекты команд. Хранимые процедуры (иногда называемые запросами хранения) являются операторами запросов SQL, которые предопределены в базе данных.
Почему вы должны создавать и использовать хранимые процедуры вместо использования строк SQL непосредственно в вашем коде? Есть несколько основных причин:
· Хранилированные процедуры были составлены с помощью базы данных. Это приводит к плану выполнения, поэтому база данных точно знает, что она будет делать, тем самым ускоряя выполнение процесса.
Хранилированные процедуры обычно кэшируются базой данных, что заставляет их работать быстрее, потому что они не обязаны читать с диска в настоящее время. Не все базы данных поддерживают этот механизм кэширования. Например, доступ Microsoft не поддерживает его, но SQL Server поддерживает его.
· Указав, что таблицы в базе данных могут быть изменены только с помощью хранимых процедур, данные могут быть более безопасными. Это означает, что потенциально опасные операции SQL не будут выполнены.
· Код ASP можно избежать смешивания вместе с длинными операторами SQL, что облегчает обслуживание кода ASP.
· Весь код SQL может быть сохранен централизованно на сервере.
· Выходные параметры могут использоваться в хранимых процедурах, чтобы позволить возврат набора записей или других значений.
Вообще говоря, сохраненные процедуры почти всегда быстрее, чем сопоставимые операторы SQL.
Чтобы использовать хранимые процедуры, просто используйте имя хранимой процедуры в качестве текста команды и установите соответствующий тип. Например, рассмотрим предыдущий пример обновленной цены книги. Если вы создаете хранимую процедуру на SQL Server, вы можете написать код:
Создать процедуру usp_updateprices
КАК
Обновление названий
Установить цену = цена * 1,10
Где тип = 'Бизнес'
Для базы данных Access Microsoft та же задача может быть выполнена с помощью простого оператора запроса на обновление
Чтобы запустить эту сохраненную процедуру на веб -странице ASP, просто используйте следующий код:
Установить cmdupdate = server.createObject (adodb.command)
cmdupdate.activeconnection = strconn
cmdupdate.commandtext = usp_updateprices
cmdupdate.commandtype = adcmdstorderproc
cmdupdate.execute, adexecutenorecords
Это просто запуск хранимой процедуры. Ни один набор записей возвращает, потому что данные просто обновляются. Важно помнить, что вы не создаете записи, если они вам действительно не нужны.
Хотя это нормально, это не очень гибкое, так как это имеет дело только с одним типом книги. Лучшим подходом является создание процесса, который позволяет нам выбрать тип книги, чтобы нам не приходилось создавать процесс для каждого типа книги. Кроме того, фиксированное 10% обновление может быть удалено, что делает для лучшей гибкости. Итак, как я могу это сделать? Это очень просто, используйте параметры.
1. Параметр
Параметры (или переменные) хранимых процедур совпадают с параметрами общих процедур и функций. Они могут быть переданы в функцию, а затем функция может использовать его значение. Хранилированные процедуры в SQL Server (то же самое относится и к другим базам данных, включая доступ), имеют эту функцию.
Для того, чтобы хранимые процедуры обрабатывали несколько типов книг и даже позволяли пользователям указать увеличение (или снижение) цен, необходимо добавить некоторые параметры:
Создать процедуру usp_updateprices
@Type char (12),
@Percent деньги
КАК
Обновление названий
Установить цену = цена * (1 @percent / 100)
Где тип = @type
Теперь хранящаяся процедура usp_updateprices принимает два параметра:
· Один из них - тип книги (@Type).
· Одним из них является процент изменений цены (@percent).
Как и функции VBScript, эти параметры являются переменными. Однако, в отличие от VBScript и других языков сценариев, переменные на этих языках сценариев - все типы переменных, в то время как переменные SQL имеют определенные типы (Char, деньги и т. Д.). Спецификация именования переменных SQL должна соблюдаться, то есть переменная должна начинаться с символа @.
Обратите внимание, что у нас есть проценты, введенные в этот процесс в качестве целого числа (например, 10%10%) вместо фракционного значения. Это просто делает сохраненные процедуры немного более интуитивными.
2. Сбор параметров
Итак, теперь существует хранящаяся процедура с параметрами, но как вы называете ее через ADO? Мы видели, как вызовать хранимые процедуры без параметров с объектами команды, и на самом деле между ними нет никакой разницы. Разница заключается в использовании коллекций параметров.
Сбор параметров содержит объекты параметров для каждого параметра в хранимой процедуре. Тем не менее, ADO не знает автоматически, каковы эти параметры, поэтому они должны быть созданы с помощью метода CreateParameter, в следующей форме:
Установить параметр = command.createParameter (name, [type], [направление], [size], [value])
Параметры и описания показаны в таблице 9-3:
Таблица 9-3 Параметры и описания метода CreateParameter
параметр
иллюстрировать
Имя
Имя параметра. Это имя параметра в сборе параметров, а не имя параметра в хранимой процедуре. Однако использование того же названия - это хорошая практика
Тип
Тип данных параметра. Это может быть константа аддататипа, см. Приложение для подробностей
Направление
Направление параметра указывает, предоставляет ли параметр информацию для хранимой процедуры или хранимой процедуры возвращает информацию в ADO. Это может быть одно из следующих значений:
adparaminput, параметр - это входной параметр, передаваемый в хранимую процедуру
adparamoutput, параметр - выходной параметр, полученный из хранимой процедуры
adparaminputOutput, параметры могут использоваться как входные и выходные параметры
AdparamRemReturnValue, этот параметр содержит состояние, возвращаемое хранимой процедурой
Размер
Длина параметра. Для типов фиксированной длины, таких как целые числа, это значение можно игнорировать
Ценить
Значение параметра
После создания параметра его можно добавить к сбору параметров, например:
Установите Parvalue = cmdupdate.createParameter (@type, Advarwchar, Adparaminput, _
12, бизнес)
cmdupdate.parameters.append parvalue
Установить Parvalue = cmdupdate.createParameter (@percent, adcurrence, _
adparaminput,, 10)
cmdupdate.parameters.append parvalue
Нет необходимости явно создавать объект для сохранения параметров, тип варианта по умолчанию уже может работать довольно хорошо. Если вы не хотите создавать переменную, вы также можете взять ярлыки, например, следующий код:
cmdupdate.parameters.append = _
cmdupdate.createparameter (@percent, adcurrence, adparaminput,, 10)
Это использует метод CreateParameter для возврата объекта параметра и получает его с помощью метода добавления. Этот метод работает быстрее, чем использование переменных, но удлиняет строку кода, что делает его менее читабельным. Вы можете выбрать один из этих методов в соответствии с вашими увлечениями.
После того, как параметры добавляются к сбору параметров, они сохраняются в нем, поэтому каждому параметру не обязательно присваивается значение при создании параметра. Значение параметра может быть установлено в любое время до запуска команды. Например:
cmdupdate.parameters.append = _
cmdupdate.createparameter (@percent, adcurrence, adparaminput)
cmdupdate.parameters (@percent) = 10
В предыдущей главе упоминалось, что в коллекции есть несколько способов доступа к значениям, и сбор параметров ничем не отличается. Приведенный выше пример использует имя параметра для извлечения параметров в наборе или также можно найти с помощью номеров индексов:
cmdupdate.parameters (0) = 10
Приведенный выше код назначает первый параметр в наборе параметров (набор параметров пронумеровано от 0)
Поделиться: связанные знания о расширенных объектах ошибки ASP для приложения ASP В VBScript существует оператор OnerRorResumenext, который заставляет интерпретатора скрипта игнорировать ошибки времени выполнения и продолжить выполнение кода скрипта. Затем скрипт может проверить значение свойства err.number, чтобы определить, произошла ли ошибка. Если возникает ошибка, возвращается ненулевое значение