Varias formas para que ASP llame a procedimientos almacenados con parámetros
Recientemente, muchos amigos han preguntado sobre cómo llamar a procedimientos almacenados. Aquí hay una breve introducción a varias formas en que ASP llama a procedimientos almacenados con parámetros.
1. Este también es el método más simple, con dos parámetros de entrada y sin valor de retorno:
establecer conexión = server.createobject("adodb.connection")
conexión.abrir algúnDSN
Connection.Execute "procname varvalue1, varvalue2"
'Borrar todos los objetos y liberar recursos
conexión.cerrar
establecer conexión = nada
2. Si desea devolver el conjunto de registros:
establecer conexión = server.createobject("adodb.connection")
conexión.abrir algúnDSN
establecer rs = server.createobject("adodb.recordset")
rs.Open "Exec procname varvalue1, varvalue2", conexión
'Borrar todos los objetos a nada y liberar recursos
rs.cerrar
conexión.cerrar
setrs=nada
establecer conexión = nada
3. Ninguno de los dos métodos anteriores puede tener un valor de retorno (excepto Recordset). Si desea obtener el valor de retorno, debe utilizar el método Comando.
En primer lugar, existen dos tipos de valores de retorno. Una es devolver directamente un valor en el procedimiento almacenado, al igual que el valor de retorno de la función de C y VB, la otra es devolver múltiples valores, y los nombres de las variables para almacenar estos valores deben especificarse primero en los parámetros de llamada; .
Este ejemplo necesita manejar múltiples parámetros, parámetros de entrada, parámetros de salida, conjuntos de registros de retorno y un valor de retorno directo (¿es lo suficientemente completo?)
El procedimiento almacenado es el siguiente:
usar pubs
GO
: crear un procedimiento almacenado
crear procedimiento sp_PubsTest
: define tres variables de parámetros, preste atención a la tercera, la marca especial es para salida
@au_lname varchar (20),
@intIDint,
@intIDOut int SALIDA
COMO
SELECCIONAR @intIDOut = @intID + 1
SELECCIONAR *
DE autores
DONDE au_lname LIKE @au_lname + '%'
--Devuelve un valor directamente
VOLVER @intID + 2
El programa asp que llama a este procedimiento almacenado es el siguiente:
<%@ Language=VBScript %>
<%
CmdSP tenue
DimadoRS
Anuncio atenuadoCmdSPStoredProc
Dim adParamReturnValue
Anuncio oscuroParaminput
Dim adParamOutput
Anuncio atenuadoEntero
iVal tenue
óvalo tenue
Dim adoField
Dim adVarChar
'Estos valores son constantes predefinidas en VB y se pueden llamar directamente, pero no están predefinidos en VBScript
adCmdSPStoredProc = 4
adParamReturnValue = 4
anuncioParaminput = 1
salidaParamad = 2
anuncioEntero = 3
adVarChar = 200
iVal = 5
oVal = 3
'Crear un objeto de comando
set CmdSP = Server.CreateObject("ADODB.Command")
'Crear un enlace
CmdSP.ActiveConnection = "Driver={SQL Server};server=(local);Uid=sa;Pwd=;Database=Pubs"
'Definir nombre de llamada del objeto de comando
CmdSP.CommandText = "sp_PubsTest"
'Establece el tipo de llamada de comando para que sea un procedimiento almacenado (adCmdSPStoredProc = 4)
CmdSP.CommandType = adCmdSPStoredProc
'Agregar parámetros al objeto de comando
'Defina el procedimiento almacenado para que tenga un valor de retorno directo y sea un número entero. El valor predeterminado es 4.
CmdSP.Parameters.Append CmdSP.CreateParameter("RETURN_VALUE", adInteger, adParamReturnValue, 4)
'Definir un parámetro de entrada de caracteres
CmdSP.Parameters.Append CmdSP.CreateParameter("@au_lname", adVarChar, adParaminput, 20, "M")
'Definir un parámetro de entrada entero
CmdSP.Parameters.Append CmdSP.CreateParameter("@intID", adInteger, adParamInput,, iVal)
'Definir un parámetro de salida entero
CmdSP.Parameters.Append CmdSP.CreateParameter("@intIDOut", adInteger, adParamOutput, oVal)
'Ejecuta el procedimiento almacenado y obtiene el conjunto de registros devuelto
Establecer adoRS = CmdSP.Execute
'Imprime cada registro. Los campos son virtuales y pueden ignorarse.
Aunque no es adoRS.EOF
para cada adoField en adoRS.Fields
Respuesta.Escribir adoField.Name & "=" & adoField.Value & "<br>" & vbCRLF
Próximo
Respuesta.Escribe "<br>"
adoRS.MoveNext
Wend
'Imprime dos valores de salida:
Respuesta.Escribir "<p>@intIDOut = " & CmdSP.Parameters("@intIDOut").Valor & "</p>"
Response.Write "<p>Valor de retorno = " & CmdSP.Parameters("RETURN_VALUE").Valor & "</p>"
'Limpieza general
Establecer adoRS = nada
Establecer CmdSP.ActiveConnection = nada
Establecer CmdSP = nada
%>
-------------------------------------------------- -------------------------------------------------- --------------------------------
Llamar al procedimiento almacenado del servidor SQL en ASP puede acelerar la velocidad de ejecución del programa.
1. Llame al almacenamiento. El método general del proceso supone que hay un procedimiento almacenado dt_users en el servidor SQL:
CREAR PROCEDIMIENTO [dbo].[dt_users]
COMO
seleccione * de los usuarios
devolver
IR
El primer método no es utilizar el objeto de comando, sino utilizar directamente el objeto de conjunto de registros.
establecer rs=servidor.createobject("adodb.recordset")
sql="exec dt_users"
rs.open sql,conn,1,1 para que el segundo método sea usar el objeto de comando
establecer comm=server.createobject("adodb.command")
comm.commantype=4
establecer comm.activeconnection=conexión
comm.commandtext="dbo.dt_users"
establecer rs=servidor.createobject("adodb.recordset")
rs.open comm,,1,1
2. Pase parámetros al procedimiento almacenado. Si no hay parámetros en el procedimiento almacenado, sino una sola declaración SQL, ¡no se mostrará la ventaja de llamar al procedimiento almacenado!
Por ejemplo, para una consulta bbs, puede consultar por autor y tema. Luego puede crear un procedimiento almacenado de la siguiente manera:
La palabra clave del parámetro es la palabra clave y elegir es el método para seleccionar la consulta.
CREAR PROCEDIMIENTO [dbo].[dt_bbs]
@palabra clave varchar(20)=nulo,
@elegir int=nulo
como
si @elegir=1
seleccione * de bbs donde nombre como @keyword
demás
seleccione * de bbs donde el asunto sea @keyword
devolver
ir
De esta forma, cuando llamamos al procedimiento almacenado, solo necesitamos pasarle los parámetros, en lugar de escribir un programa en asp y usar el primer método:
establecer rs=servidor.createobject("adodb.recordset")
sql="exec dt_bbs '"&palabra clave&"',"&elegir&""
rs.open sql, conexión, 1,1
Utilice el segundo método:
establecer comm=server.createobject("adodb.command")
comm.commantype=4
comm.Parameters.append comm.CreateParameter("@palabra clave",adChar,adParamInput,50,palabra clave)
comm.Parameters.append comm.CreateParameter("@palabra clave",adInteger,adParamInput,,elegir)
establecer comm.activeconnection=conexión
comm.commandtext="dbo.dt_bbs"
establecer rs=servidor.createobject("adodb.recordset")
rs.CursorType=3
rs.comunicación abierta,,1,1