Несколько способов вызова хранимых процедур с параметрами в ASP
Недавно многие друзья спрашивали о вызове хранимых процедур с параметрами. Вот краткое введение в несколько способов вызова хранимых процедур с параметрами в ASP.
1. Это также самый простой метод с двумя входными параметрами и без возвращаемого значения:
установить соединение = server.createobject("adodb.connection")
Connection.open someDSN
Connection.Execute "procname varvalue1, varvalue2"
'Очистить все объекты и освободить ресурсы
соединение.закрыть
установить соединение = ничего
2. Если вы хотите вернуть набор Recordset:
установить соединение = server.createobject("adodb.connection")
Connection.open someDSN
set rs = server.createobject("adodb.recordset")
rs.Open "Exec procname varvalue1, varvalue2",connection
'Очистить все объекты и освободить ресурсы
RS.закрыть
соединение.закрыть
setrs=ничего
установить соединение = ничего
3. Ни один из двух вышеуказанных методов не может иметь возвращаемое значение (кроме набора записей). Если вы хотите получить возвращаемое значение, вам необходимо использовать метод Command.
Прежде всего, существует два типа возвращаемых значений. Один из них — напрямую возвращать значение в хранимой процедуре, точно так же, как возвращаемое значение функции C и VB; другой — возвращать несколько значений, причем имена переменных для хранения этих значений необходимо сначала указать в вызывающих параметрах; .
В этом примере необходимо обрабатывать несколько параметров, входные параметры, выходные параметры, возвращаемые наборы записей и прямое возвращаемое значение (достаточно ли он завершен?)
Хранимая процедура выглядит следующим образом:
используйте пабы
GO
— Создать хранимую процедуру
создаем процедуру sp_PubsTest
-- определяем три переменные параметра, обратите внимание на третью, специальная отметка предназначена для вывода
@au_lname varchar (20),
@intID целое число,
@intIDOut int ВЫВОД
КАК
SELECT @intIDOut = @intID + 1
SELECT *
ОТ авторов
WHERE au_lname LIKE @au_lname + '%'
-- Возвращает значение напрямую
ВОЗВРАТ @intID + 2
Программа asp, вызывающая эту хранимую процедуру, выглядит следующим образом:
<%@ Language=VBScript %>
<%
Тусклый CmdSP
ДимадоRS
Тусклый адкмдСПсторедпрок
Тусклый параметр объявленияParamReturnValue
Тусклый рекламный параметр
Dim adParamOutput
Тусклое объявлениеЦелое число
Дим иВал
Тусклый овал
Тусклое поле adoField
Dim adVarChar
'Эти значения являются предопределенными константами в VB и могут вызываться напрямую, но они не определены заранее в VBScript.
адкмдСПсторедпрок = 4
адПарамReturnValue = 4
адПараминпут = 1
адПарамВыход = 2
адЦелое = 3
adVarChar = 200
iVal = 5
oVal = 3
'Создать объект команды
set CmdSP = Server.CreateObject("ADODB.Command")
'Создать ссылку
CmdSP.ActiveConnection = "Driver={SQL Server};server=(local);Uid=sa;Pwd=;Database=Pubs"
'Определить имя вызова объекта команды
CmdSP.CommandText = "sp_PubsTest"
'Установить тип вызова команды как хранимую процедуру (adCmdSPStoredProc = 4)
CmdSP.CommandType = adCmdSPStoredProc
'Добавить параметры в объект команды
'Определите хранимую процедуру, чтобы она имела прямое возвращаемое значение, и это целое число. Значение по умолчанию - 4.
CmdSP.Parameters.Append CmdSP.CreateParameter("RETURN_VALUE", adInteger, adParamReturnValue, 4)
'Определяем параметр ввода символов
CmdSP.Parameters.Append CmdSP.CreateParameter("@au_lname", adVarChar, adParaminput, 20, "M")
'Определяем целочисленный входной параметр
CmdSP.Parameters.Append CmdSP.CreateParameter("@intID", adInteger, adParamInput, , iVal)
'Определяем целочисленный выходной параметр
CmdSP.Parameters.Append CmdSP.CreateParameter("@intIDOut", adInteger, adParamOutput, oVal)
'Запуск хранимой процедуры и получение возвращенного набора записей
Установите adoRS = CmdSP.Execute
'Распечатайте каждую запись. Поля виртуальные и их можно игнорировать.
Пока не adoRS.EOF
для каждого adoField в adoRS.Fields
Response.Запишите adoField.Name & "=" & adoField.Value & "<br>" & vbCRLF
Следующий
Ответ. Напишите "<br>"
adadoRS.MoveNext
Wend
'Выведите два выходных значения:
Response.Write "<p>@intIDOut = " & CmdSP.Parameters("@intIDOut").Value & "</p>"
Response.Write "<p>Возвращаемое значение = " & CmdSP.Parameters("RETURN_VALUE").Value & "</p>"
'Генеральная уборка
Установите adoRS = ничего
Установите CmdSP.ActiveConnection = ничего
Установить CmdSP = ничего
%>
-------------------------------------------------- -------------------------------------------------- --------------------------------
Вызов хранимой процедуры сервера sql в asp может ускорить скорость работы программы
1. Вызов хранилища. Общий метод процесса предполагает наличие хранимой процедуры dt_users на sql-сервере:
СОЗДАТЬ ПРОЦЕДУРУ [dbo].[dt_users]
КАК
выберите * среди пользователей
возвращаться
ИДТИ
Первый метод заключается не в использовании объекта команды, а непосредственно в использовании объекта набора записей.
set rs=server.createobject("adodb.recordset")
sql="exec dt_users"
rs.open sql,conn,1,1, чтобы второй метод заключался в использовании командного объекта
set comm=server.createobject("adodb.command")
comm.commantype=4
установите com.activeconnection=conn
comm.commandtext="dbo.dt_users"
set rs=server.createobject("adodb.recordset")
rs.open comm,,1,1
2. Передача параметров в хранимую процедуру Если в хранимой процедуре нет параметров, а есть только один оператор SQL, преимущество вызова хранимой процедуры не будет показано!
Например, для запроса bbs вы можете запросить по автору и теме! Затем вы можете создать хранимую процедуру следующим образом:
Ключевое слово параметра — это ключевое слово, а Choose — это метод выбора запроса.
СОЗДАТЬ ПРОЦЕДУРУ [dbo].[dt_bbs]
@keyword varchar(20)=ноль,
@choose int=null
как
если @choose=1
выберите * из bbs, где имя типа @keyword
еще
выберите * из bbs, где тема, например @keyword
возвращаться
идти
Таким образом, когда мы вызываем хранимую процедуру, нам нужно только передать параметры, вместо того, чтобы писать программу на asp и использовать первый метод:
set rs=server.createobject("adodb.recordset")
sql="exec dt_bbs '"&ключевое слово&"',"&выбрать&""
rs.open sql,conn,1,1
Используйте второй метод:
set comm=server.createobject("adodb.command")
comm.commantype=4
comm.Parameters.append comm.CreateParameter("@keyword",adChar,adParamInput,50,ключевое слово)
comm.Parameters.append comm.CreateParameter("@keyword",adInteger,adParamInput,,choose)
установите com.activeconnection=conn
comm.commandtext="dbo.dt_bbs"
set rs=server.createobject("adodb.recordset")
rs.CursorType=3
rs.open com,,1,1