Лекция ASP 9: ASP и база данных (4)
Автор:Eve Cole
Время обновления:2009-05-30 19:54:56
В этой лекции мы в основном познакомим вас с тем, как использовать параметры и хранимые процедуры.
1. Используйте объект «Команда» и объект «Параметры» для передачи параметров. В этой лекции в основном будет использоваться база данных Microsoft SQL Server7.0. Сначала создайте файл подключения AdoSQL7.asp для резервного копирования. Никаких специальных инструкций при его использовании не будет. будущее.
<% 'AdoSQL7.asp
Опция явная
Ответ.Истекает = 0
'Часть 1: Установление соединения
Дим Cnn, StrCnn
Установить Cnn = Server.CreateObject("ADODB.Connection")
StrCnn = "Provider=sqloledb; Идентификатор пользователя=sa; Пароль=; Начальный каталог=pubs; Источник данных=ICBCZJP"
Cnn.Open StrCnn
%>
Примечание. При самостоятельном использовании установите в качестве источника данных имя компьютера вашего сервера базы данных.
Кроме того, раньше при использовании базы данных Access было очень удобно использовать Microsoft Access97 для просмотра полей и данных. Однако при использовании базы данных SQL Server, особенно при отладке сценариев ASP не на сервере базы данных, а на другом компьютере, это возможно. необходимо для просмотра полей и данных. Данные необходимо устанавливать отдельно. Вот инструмент для вас: Msqry32.exe (Microsoft Query). Этот файл устанавливается вместе с Office97 и обычно находится в каталоге «Microsoft OfficeOffice».
Пример wuf70.asp:
<%@ LANGUAGE="VBSCRIPT" %>
<!--#include file="AdoSQL7.asp"-->
<!--#include file="adovbs.inc"-->
<% 'wuf70.asp
Dim cmdTest, prmTest, rsTest
'Создать объект команды
Установите cmdTest = Server.CreateObject("ADODB.Command")
'Объекты Recordset и Command могут подключаться к объектам Connection через свойство ActiveConnection.
cmdTest.ActiveConnection = Cnn
'Команда SQL - содержит два параметра, использовать? выражать
cmdTest.CommandText = "Обновить задания Set job_desc = ? Где job_id =?"
'Установим тип команды как оператор SQL
cmdTest.CommandType = adCmdText
Атрибут «Подготовлено» определяет, следует ли сначала компилировать команду SQL. Установка значения True может ускорить выполнение.
cmdTest.Prepared = Истина
'Создать объект параметра
Set prmTest=cmdTest.CreateParameter("job_desc",adVarChar,adParamInput,50,"сеть")
'Добавляем данные в коллекцию данных параметров
cmdTest.Parameters.Append prmTest
Установите prmTest = cmdTest.CreateParameter("job_id",adSmallInt,adParamInput,,"12")
cmdTest.Parameters.Append prmTest
'Выполнение изменений – нет необходимости возвращать результаты, просто используйте cmdTest.Execute
cmdTest.Execute
'Сбросьте параметры и запустите – вы можете изменить другой фрагмент данных
cmdTest.Parameters("job_id") = "1"
cmdTest.Parameters("job_desc") = "Тест"
cmdTest.Execute
'Сбросить параметры для запуска
cmdTest("job_id") = "14"
cmdTest("job_desc") = "Финансы"
cmdTest.Execute
Set rsTest = Cnn.Execute("Выбрать job_id,job_desc из заданий")
Пока это не rsTest.EOF
Response.Write rsTest(0) & rsTest(1) & "<br>"
rsTest.MoveNext
Венд
Cnn.close: Установить prmTest = Ничего
Установить cmdTest = Ничего: Установить Cnn = Ничего
%>
анализировать:
1. Метод CreateParameter объекта Command используется для создания объектов параметров для команд SQL или хранимых процедур. Всего имеется пять параметров (все пять параметров являются необязательными):
Первый параметр: имя объекта параметра;
Второй параметр: тип данных объекта параметра, слишком много типов, обратитесь к справке ADO, здесь adVarChar (строковое значение), adSmallInt (2-байтовое целое число со знаком);
Третий параметр: тип параметра. Может быть: adParamInput (указывает входной параметр), adParamOutput (указывает выходной параметр), adParamReturnValue (указывает возвращаемое значение), adParamUnknown (указывает, что тип параметра не может быть определен), adParamInputOutput (указывает входной/выходной параметр);
Четвертый параметр: длина данных параметра. Лучше всего указать его равным длине соответствующего поля в базе данных, чтобы избежать ошибок при его использовании, особенно если тип данных — VarChar, если это целое число или. тип даты, указывать это значение не нужно;
Пятый параметр: начальное значение настройки параметра.
2. Метод cmdTest.Parameters.Append добавляет объект параметра в коллекцию данных параметров. В этом примере вы также можете увидеть, как использовать несколько параметров.
3. Как видно из этого примера, для изменения других данных нужно только сбросить входные параметры, что очень удобно. Эта идея также является одним из наиболее часто используемых методов в программировании.
4. Чтобы сбросить параметры, вы можете использовать cmdTest.Parameters или опустить его как cmdTest("job_id").
2. Использование хранимых процедур в ASP. Что такое хранимая процедура (хранимая процедура находится на сервере базы данных и представляет собой набор операторов SQL, который может содержать один или несколько операторов SQL. Как создать хранимую процедуру). Содержание этой лекции В этой лекции в основном приводятся примеры, иллюстрирующие вызов хранимых процедур в ASP.
Преимущества использования хранимых процедур огромны: хранимые процедуры более эффективны, чем выполнение команд SQL в сценариях ASP; они могут улучшить общую производительность и снизить нагрузку на сеть (уменьшая взаимодействие между сетевым сервером и сервером данных; они могут оптимизировать код ASP); и повысить гибкость кода и т. д.
(1) Использование входных параметров в хранимой процедуре. В этом примере используется хранимая процедура «byroyalty», которая входит в состав SQL Server 7.0. Оператор SQL в ней очень прост. Это не что иное, как дополнительная процедура CREATE PROCEDURE и входные данные. Параметр @percentage:
СОЗДАТЬ ПРОЦЕДУРУ byroyalty @percentage int
КАК
выберите au_id из titleauthor
где titleauthor.royaltyper = @percentage
Пример wuf71.asp
<% @LANGUAGE = VBScript %>
<!--#include file="AdoSQL7.asp"-->
<!--#include file="adovbs.inc"-->
<% 'wuf71.asp
Dim cmdTest, prmTest, rsTest
Установите cmdTest = Server.CreateObject("ADODB.Command")
cmdTest.CommandText = "byroyalty" 'Имя хранимой процедуры
'Установим тип команды как хранимую процедуру
cmdTest.CommandType = adCmdStoredProc
'Создать объект параметра
Установите prmTest = Server.CreateObject("ADODB.Parameter")
'Атрибут типа соответствует второму параметру в wuf70.asp
prmTest.Type = adInteger '4-байтовое целое число со знаком' Атрибут направления соответствует третьему параметру в wuf70.asp
prmTest.Direction = adParamInput
'Атрибут Value соответствует пятому параметру в wuf70.asp
прмТест.Значение = 30
cmdTest.Parameters.Append prmTest
Установите cmdTest.ActiveConnection = Cnn
'Вам нужно вернуть набор записей, поэтому используйте Set rsTest = cmdTest.Execute
Установите rsTest = cmdTest.Execute
Пока это не rsTest.EOF
Response.Write rsTest(0) & "<br>"
rsTest.MoveNext
Венд
Cnn.закрыть
Установить rsTest = Ничего: Установить prmTest = Ничего
Установить cmdTest = Ничего: Установить Cnn = Ничего
%>
Свойство CommandText может указывать команду SQL, хранимую процедуру или имя таблицы.
В этом примере создание объекта параметра немного отличается от wuf70.asp. На самом деле, если внимательно посмотреть, в этом примере есть два неиспользуемых атрибута: prmTest.Name, prmTest.Size плюс Type, Direction. и Value, соответствующие пяти параметрам в wuf70.asp.
(2) При использовании выходных параметров для получения записи или вычисления значения из таблицы базы данных необходимо использовать хранимую процедуру, которая возвращает выходные параметры. Для примера сначала создайте новую хранимую процедуру OUTemploy в библиотеке pubs SQL Server. Эта хранимая процедура должна ввести две даты, а затем вывести максимальное значение.
СОЗДАТЬ ПРОЦЕДУРУ OUTemploy
(
@job_lvl tinyint ВЫВОД,
@hire_date1 дата-время,
@hire_date2 дата-время
)
КАК
выберите @job_lvl = MAX(job_lvl) у сотрудника
где Hire_date >= @hire_date1 и Hire_date <= @hire_date2
Существует несколько способов создания хранимых процедур:
1. Используйте Enterprise Manager Microsoft SQL Server. После открытия откройте его в древовидном каталоге слева: Корень консоли – Серверы Microsoft SQL – Группа SQL Server – ICBCZJP (Windows NT) – базы данных – пабы – хранимая процедура – Новая хранимая процедура. . Введите хранимую процедуру. Наконец, для нее также можно выполнить обнаружение грамматики;
2. Используя анализатор запросов Microsoft SQL Server, сначала подключитесь к серверу базы данных и выберите базу данных pubs. Введите указанную выше хранимую процедуру и нажмите «Выполнить запрос» (или нажмите F5);
3. Используя VB6.0, после открытия меню «Вид»/«Окно просмотра данных» щелкните правой кнопкой мыши «Ссылка на данные»/«Новая ссылка на данные»;
4. Используйте сценарий ASP для создания хранимой процедуры, например wuf75.asp:
<% @LANGUAGE = VBScript %>
<!--#include file="AdoSQL7.asp"-->
<!--#include file="adovbs.inc"-->
<% 'wuf75.asp
ДимStrSQL
'Примечание: & Chr(10) и Chr(13) совершенно не нужны, в основном для красоты.
StrSQL="CREATE PROCEDURE OUTemploy ( @job_lvl tinyint OUTPUT, " & Chr(10) & Chr(13) &_
"@hire_date1 datetime, @hire_date2 datetime) AS " & Chr(10) & Chr(13) &_
"выберите @job_lvl = MAX(job_lvl) у сотрудника " &_
"где Hire_date >= @hire_date1 и Hire_date <= @hire_date2"
Cnn.Execute StrSQL
Response.Write «Успешное создание хранимой процедуры»
Cnn.close: Установить Cnn = Ничего
%>
После создания хранимой процедуры, помимо использования меню, вы также можете использовать оператор SQL «Drop Процедура OUTemploy», чтобы удалить ее.
Пример wuf72.asp — отправьте необходимые входные параметры в хранимую процедуру и получите выходные результаты.
<% @LANGUAGE = VBScript %>
<!--#include file="AdoSQL7.asp"-->
<!--#include file="adovbs.inc"-->
<% 'wuf72.asp
Тусклый cmdTest, prmTest
Установите cmdTest = Server.CreateObject("ADODB.Command")
cmdTest.ActiveConnection = Cnn
cmdTest.CommandText = "OUTemploy" 'Имя хранимой процедуры
cmdTest.CommandType = adCmdStoredProc
'Создать объект параметра
Установите prmTest = cmdTest.CreateParameter("job_lvl",adTinyInt,adParamOutput)
cmdTest.Parameters.Append prmTest
'adTinyInt - 1-байтовое целое число со знаком
'adDbDate - значение даты (ггггммдд)
Установите prmTest = cmdTest.CreateParameter("hiredate1",adDBDate,adParamInput,,"1993-05-09")
cmdTest.Parameters.Append prmTest
Установите prmTest = cmdTest.CreateParameter("hiredate2",adDBDate,adParamInput,,"1994-02-01")
cmdTest.Parameters.Append prmTest
cmdTest.Execute
«Следующие три выражения имеют одинаковое значение
Response.Write cmdtest("job_lvl") & "<br>"
Response.Write cmdTest.Parameters("job_lvl") & "<br>"
Response.Write cmdTest.Parameters("job_lvl").Value
Cnn.закрыть
Установите prmTest = Ничего
Установить cmdTest = Ничего: Установить Cnn = Ничего
%>
(3) Используйте параметр кода возврата, чтобы использовать оператор Return для возврата различных кодов возврата из хранимой процедуры. Например, следующая хранимая процедура сначала получает набор записей, а затем возвращает 1, если есть сотрудник по имени Маргарет, в противном случае она возвращает 1. возвращает 0.
Создать процедуру Returnemploy
КАК
выберите emp_id, fname у сотрудника
Если существует (выберите имя от сотрудника, где fname = «Маргарет»)
Возврат(1)
Еще
Возврат(0)
Пример wuf73.asp
<% @LANGUAGE = VBScript %>
<!--#include file="AdoSQL7.asp"-->
<!--#include file="adovbs.inc"-->
<% 'wuf73.asp
Dim cmdTest, prmTest, rsTest
Установите cmdTest = Server.CreateObject("ADODB.Command")
cmdTest.ActiveConnection = Cnn
cmdTest.CommandText = "Returnemploy" 'Имя хранимой процедуры
cmdTest.CommandType = adCmdStoredProc
Установите prmTest = cmdTest.CreateParameter("ReturnValue",adInteger,adParamReturnValue)
cmdTest.Parameters.Append prmTest
Установите rsTest = cmdTest.Execute()
Пока это не rsTest.EOF
Response.Write rsTest(0) & " ][ " & rsTest(1) & "<br>"
rsTest.MoveNext
Венд
rsTest.Close: Установить rsTest = Ничего
'Перед возвратом cmdtest("ReturnValue") необходимо сначала закрыть rsTest, иначе результат будет неверным
Если cmdtest("ReturnValue") = 1 Тогда
Ответ.Напишите «Есть этот сотрудник»
Еще
Ответ.Напишите «Нет такого сотрудника».
Конец, если
Cnn.закрыть
Установите prmTest = Ничего
Установить cmdTest = Ничего: Установить Cnn = Ничего
%>
3. Как обрабатывать большие данные Под «большими данными» здесь в основном подразумеваются поля «Текст» (крупный текст) и «изображение» (изображение), данные которых невозможно получить корректно описанным выше способом. Сначала необходимо использовать Size = rsTest(0).ActualSize, чтобы получить фактическую длину значения поля, а затем использовать rsTest(0).GetChunk(Size) для получения данных. В реальном использовании, поскольку эти поля относительно велики, в целях экономии и рационального использования ресурсов сервера обычно применяется сегментированное чтение. Пример wuf74.asp:
<% @LANGUAGE = VBScript %>
<!--#include file="AdoSQL7.asp"-->
<!--#include file="adovbs.inc"-->
<% 'wuf74.asp
Дим StrSQL, rsTest
'pr_info — текстовое поле
StrSQL = "Выберите pr_info,pub_id из pub_info"
Установите rsTest = Cnn.Execute(StrSQL)
Dim BasicSize, BeginSize, LText
Делайте, пока не rsTest.EOF
Response.Write rsTest(1) & "<br>"
'Чтение 1024 байт каждый раз
Базовый размер = 1024
Бегинсизе = 0
Пока BeginSize < rsTest(0).ActualSize
LText = rsTest(0).GetChunk(BasicSize)
НачатьРазмер = НачатьРазмер + БазовыйРазмер
'Вывод клиенту сегмент за сегментом
Response.Write LText
Венд
Ответ. Напишите "<br><br>"
rsTest.MoveNext
Петля
Cnn.закрыть
Установить rsTest = Ничего: Установить Cnn = Ничего
%>
В этом примере каждый раз считывается максимум 1024 байта, а данные считываются несколько раз. Напротив, если вы записываете большие данные в базу данных, метод аналогичен приведенному выше, но вместо метода GetChunk вы используете метод AppendChunk:
rsTest(0).AppendChunkLtext
Примечание. Наконец, я расскажу вам небольшую хитрость о базе данных SQL Server. Если вы столкнулись с такой ситуацией: данные на китайском языке в базе данных отображаются искаженными символами, не паникуйте. Вам нужно всего лишь зайти на мой сайт, скачать sqlsrv32.dll и перезаписать файл с тем же именем в папке «C:WindowsSystem». Источником проблемы является драйвер SQL Server, который обычно возникает в Windows 98 Second Edition (номер версии драйвера SQL Server — 3.70.06.23), Windows 2000 или при установке MDAC2.5 (номер версии — 3.70.08.20). .