Explicación detallada de la aplicación de procedimiento almacenado en el desarrollo de ASP | llamada, parámetro, almacenamiento, base de datos, salida, compilación, mycomm, entrada, ID de usuario, código Hay muchos artículos sobre ASP y procedimientos almacenados, pero dudo que los autores lo hayan hecho. realmente lo practicaba. Cuando era principiante, consulté mucha información relevante y descubrí que muchos de los métodos proporcionados no eran los mismos en la práctica. Para aplicaciones simples, estos materiales pueden ser útiles, pero se limitan a esto porque son básicamente iguales y se copian entre sí. Para aplicaciones un poco más complejas, no son claros.
Ahora, básicamente accedo a SQL Server llamando a procedimientos almacenados. El siguiente texto es un resumen de la práctica, espero que sea útil para todos.
Un procedimiento almacenado es uno o más comandos SQL almacenados en la base de datos como objetos ejecutables.
Las definiciones son siempre abstractas. Un procedimiento almacenado es en realidad un conjunto de declaraciones SQL que pueden completar ciertas operaciones, pero este conjunto de declaraciones se coloca en la base de datos (aquí solo hablamos de SQL Server). Si creamos procedimientos almacenados y llamamos a procedimientos almacenados en ASP, podemos evitar mezclar declaraciones SQL con código ASP. Hay al menos tres beneficios al hacer esto:
primero, mejora enormemente la eficiencia. La velocidad de ejecución del procedimiento almacenado en sí es muy rápida y llamar al procedimiento almacenado puede reducir en gran medida la cantidad de interacciones con la base de datos.
En segundo lugar, mejorar la seguridad. Si mezcla sentencias SQL en código ASP, una vez que el código se ve comprometido, también significa que la estructura de la biblioteca está comprometida.
En tercer lugar, favorece la reutilización de declaraciones SQL.
En ASP, los procedimientos almacenados generalmente se llaman a través de objetos de comando. Dependiendo de la situación, este artículo también presenta otros métodos de llamada. Para facilitar la explicación, se realiza la siguiente clasificación simple según la entrada y salida del procedimiento almacenado:
1. El procedimiento almacenado que solo devuelve un único conjunto de registros
asume el siguiente procedimiento almacenado (el propósito de este artículo no es describir Sintaxis T-SQL, por lo que el procedimiento almacenado solo proporciona el código, sin explicación):
/*SP1*/
CREAR PROCEDIMIENTO dbo.getUserList
como
establecer no contar en
comenzar
seleccione * de dbo.[información de usuario]
fin
de go
obtiene todos los registros en la tabla de información de usuario y devuelve un conjunto de registros. El código ASP para llamar al procedimiento almacenado a través del objeto de comando es el siguiente:
'**Llamar al procedimiento almacenado a través del objeto Comando**
Atenuar MyComm, MyRst
Establecer MyComm = Server.CreateObject ("ADODB.Command")
MyComm.ActiveConnection = MyConStr 'MyConStr es la cadena de conexión de la base de datos
MyComm.CommandText = "getUserList" 'Especifique el nombre del procedimiento almacenado
MyComm.CommandType = 4 'Indica que se trata de un procedimiento almacenado
MyComm.Prepared = true 'Requiere que los comandos SQL se compilen primero
Establecer MyRst = MyComm.Execute
Set MyComm = Nothing
El conjunto de registros obtenido por el procedimiento almacenado se asigna a MyRst. A continuación, se puede operar MyRst.
En el código anterior, el atributo CommandType indica el tipo de solicitud. El valor y la descripción son los siguientes:
-1 indica que el tipo del parámetro CommandText no se puede determinar 1 indica que el parámetro CommandText es un tipo de comando general 2 indica que el. El parámetro CommandText es un nombre de tabla existente 4 indica que el parámetro CommandText es El nombre de un procedimiento almacenado
también se puede usar para llamar al procedimiento almacenado a través del objeto Connection o el objeto Recordset. Los métodos son los siguientes:
'**Llamar al procedimiento almacenado a través del objeto Conexión**
Atenuar MyConn, MyRst
Establecer MyConn = Server.CreateObject ("ADODB.Connection")
MyConn.open MyConStr 'MyConStr es la cadena de conexión de la base de datos
Set MyRst = MyConn.Execute("getUserList",0,4) 'El último parámetro tiene el mismo significado que CommandType
Establecer MyConn = Nothing
'**Llamar al procedimiento almacenado a través del objeto Recordset**
DIM MyRst
Establecer MyRst = Server.CreateObject ("ADODB.Recordset")
MyRst.open "getUserList",MyConStr,0,1,4
'MyConStr es una cadena de conexión de base de datos y el último parámetro tiene el mismo significado que CommandType
2. Para procedimientos almacenados sin entrada ni salida,
consulte los siguientes procedimientos almacenados:
/*SP2*/
CREAR PROCEDIMIENTO dbo.delUserAll
como
establecer no contar en
comenzar
eliminar de dbo.[información de usuario]
fin
go
elimina todos los registros en la tabla de información de usuario sin ninguna entrada ni salida. El método de llamada es básicamente el mismo que el mencionado anteriormente, excepto que no es necesario obtener el conjunto de registros:
'**Llamar al procedimiento almacenado a través del objeto Comando**
Atenuar MiComm
Establecer MyComm = Server.CreateObject ("ADODB.Command")
MyComm.ActiveConnection = MyConStr 'MyConStr es la cadena de conexión de la base de datos
MyComm.CommandText = "delUserAll" 'Especifique el nombre del procedimiento almacenado
MyComm.CommandType = 4 'Indica que se trata de un procedimiento almacenado
MyComm.Prepared = true 'Requiere que los comandos SQL se compilen primero
MyComm.Execute 'No es necesario obtener el registro establecido aquí
Set MyComm = Nothing
Por supuesto, dichos procedimientos almacenados también se pueden llamar a través del objeto Connection o del objeto Recordset, pero el objeto Recordset se crea para obtener el conjunto de registros. Si no se devuelve el conjunto de registros, es mejor utilizar el objeto Command.
3.Al realizar operaciones similares a SP2,
los procedimientos almacenados con valores de retorno
deben aprovechar al máximo las potentes capacidades de procesamiento de transacciones de SQL Server para mantener la coherencia de los datos.Además, es posible que necesitemos que el procedimiento almacenado devuelva el estado de ejecución. Para ello modificaremos el SP2 de la siguiente manera:
/*SP3*/
CREAR PROCEDIMIENTO dbo.delUserAll
como
establecer no contar en
comenzar
COMENZAR LA TRANSACCIÓN
eliminar de dbo.[información de usuario]
SI @@error=0
comenzar
COMPROMETER TRANSACCIÓN
regresar 1
fin
DEMÁS
comenzar
TRANSACCIÓN DE ROLLBACK
regresar 0
fin
devolver
fin
go
devuelve 1 cuando la eliminación se ejecuta correctamente; de lo contrario, devuelve 0 y realiza la operación de reversión. Para obtener el valor de retorno en ASP, debe utilizar la colección Parameters para declarar parámetros:
'**Llame a un procedimiento almacenado con un valor de retorno y obtenga el valor de retorno**
DIM MiComm,MiPara
Establecer MyComm = Server.CreateObject ("ADODB.Command")
MyComm.ActiveConnection = MyConStr 'MyConStr es la cadena de conexión de la base de datos
MyComm.CommandText = "delUserAll" 'Especifique el nombre del procedimiento almacenado
MyComm.CommandType = 4 'Indica que se trata de un procedimiento almacenado
MyComm.Prepared = true 'Requiere que los comandos SQL se compilen primero
'Declarar valor de retorno
Establecer Mypara = MyComm.CreateParameter("RETURN",2,4)
MyComm.Parameters.Agregar MyPara
MiComm.Ejecutar
'Obtener el valor de retorno
Valor retenido DIM
retValue = MyComm(0) 'o retValue = MyComm.Parameters(0)
Establecer MyComm = Nothing
En MyComm.CreateParameter("RETURN",2,4), el significado de cada parámetro es el siguiente:
El primer parámetro ("RETURE") es el nombre del parámetro. El nombre del parámetro se puede establecer arbitrariamente, pero generalmente debe ser el mismo que el nombre del parámetro declarado en el procedimiento almacenado. Aquí está el valor de retorno, que normalmente establezco en "RETURE";
el segundo parámetro (2) indica el tipo de datos del parámetro. Para códigos de tipo específicos, consulte la referencia de ADO que se proporciona a continuación.
anuncioBigInt: 20;
binario: 128;
anuncioBooleano: 11;
anuncioCar: 129;
adDBTimeStamp: 135;
adVacio: 0;
anuncioEntero: 3;
adSmallInt: 2;
adTinyInt: 16;
adVarChar: 200;
para el valor de retorno, solo se pueden usar números enteros y -1 a -99 son valores reservados;
el tercer parámetro (4) indica la naturaleza del parámetro, donde 4 indica que se trata de un valor de retorno. La descripción del valor de este parámetro es la siguiente:
0: el tipo no se puede determinar; 1: parámetro de entrada; 2: parámetro de entrada 3: parámetro de entrada o salida 4: valor de retorno
Se debe decir que el código ASP anterior; ser un código completo, también Es decir, el código más complejo, de hecho
Establecer Mypara = MyComm.CreateParameter("RETURN",2,4)
MyComm.Parameters.Append MyPara
se puede simplificar a
MyComm.Parameters.Append MyComm.CreateParameter("RETURN",2,4)
incluso se puede seguir simplificando, lo que se explicará más adelante.
Para los procedimientos almacenados con parámetros, solo se pueden llamar usando el objeto Command (también hay información de que se pueden llamar a través del objeto Connection o del objeto Recordset, pero no lo he probado).
4. El valor de retorno de un procedimiento almacenado con parámetros de entrada y parámetros de salida
es en realidad un parámetro de salida especial. En la mayoría de los casos, utilizamos procedimientos almacenados que tienen parámetros de entrada y salida. Por ejemplo, queremos obtener el nombre de usuario de un usuario con una determinada ID en la tabla de información del usuario. --ID de usuario y un parámetro de salida----nombre de usuario. El procedimiento almacenado para implementar esta función es el siguiente:
/*SP4*/
CREAR PROCEDIMIENTO dbo.getUserName
@ID de usuario int,
Salida de @UserName varchar(40)
como
establecer no contar en
comenzar
si @UserID es nulo, devuelve
seleccione @UserName=nombre de usuario
de dbo.[información de usuario]
donde ID de usuario = @ ID de usuario
devolver
fin
ir
a llamar al procedimiento almacenado es el siguiente:
'**Llamando a un procedimiento almacenado con parámetros de entrada y salida**
DIM MiComm,ID de usuario,Nombre de usuario
ID de usuario = 1
Establecer MyComm = Server.CreateObject ("ADODB.Command")
MyComm.ActiveConnection = MyConStr 'MyConStr es la cadena de conexión de la base de datos
MyComm.CommandText = "getUserName" 'Especifique el nombre del procedimiento almacenado
MyComm.CommandType = 4 'Indica que se trata de un procedimiento almacenado
MyComm.Prepared = true 'Requiere que los comandos SQL se compilen primero
'Declarar parámetros
MyComm.Parameters.append MyComm.CreateParameter("@IDUsuario",3,1,4,IDUsuario)
MyComm.Parameters.append MyComm.CreateParameter("@NombreDeUsuario",200,2,40)
MiComm.Ejecutar
'Obtener los parámetros
Nombre de usuario = MiComun(1)
Establecer MyComm = Nothing
En el código anterior, puede ver que, a diferencia de declarar el valor de retorno, se requieren 5 parámetros al declarar parámetros de entrada y 4 parámetros al declarar parámetros de salida. Al declarar parámetros de entrada, los cinco parámetros son: nombre del parámetro, tipo de datos del parámetro, tipo de parámetro, longitud de los datos y valor del parámetro. Al declarar un parámetro de salida, no hay un último parámetro: el valor del parámetro.
Se debe prestar especial atención a: al declarar parámetros, el orden debe ser el mismo que el definido en el procedimiento almacenado, y el tipo de datos y la longitud de cada parámetro también deben ser los mismos que los definidos en el procedimiento almacenado.
Si el procedimiento almacenado tiene múltiples parámetros, el código ASP se volverá engorroso. Puede usar el comando with para simplificar el código:
'**Llamar a un procedimiento almacenado con parámetros de entrada y salida (código simplificado)**
DIM MiComm,ID de usuario,Nombre de usuario
ID de usuario = 1
Establecer MyComm = Server.CreateObject ("ADODB.Command")
conMyComm
.ActiveConnection = MyConStr 'MyConStr es la cadena de conexión de la base de datos.CommandText = "getUserName" 'Especifique el nombre del procedimiento almacenado.CommandType = 4 'Indica que se trata de un procedimiento almacenado.Prepared = true 'Requiere que el comando SQL se compile primero.Parámetros .append .CreateParameter ("@ID de usuario",3,1,4,ID de usuario)
.Parameters.append .CreateParameter("@NombreDeUsuario",200,2,40)
.Ejecutar
terminar con
Nombre de usuario = MiComun(1)
Establecer MyComm = Nada
Si queremos obtener los nombres de usuario de 10 usuarios con ID del 1 al 10, ¿necesitamos crear el objeto Comando 10 veces? No. Si necesita llamar al mismo procedimiento almacenado varias veces, simplemente cambie los parámetros de entrada y obtendrá resultados diferentes:
'**Llamando al mismo procedimiento almacenado varias veces**
DIM MiComm,ID de usuario,Nombre de usuario
Nombre de usuario = ""
Establecer MyComm = Server.CreateObject ("ADODB.Command")
para ID de usuario = 1 a 10
conMyComm
.ActiveConnection = MyConStr 'MyConStr es la cadena de conexión de la base de datos.CommandText = "getUserName" 'Especifique el nombre del procedimiento almacenado.CommandType = 4 'Indica que se trata de un procedimiento almacenado.Prepared = true 'Requiere que el comando SQL se compile primero si es UserID = 1 entonces
.Parameters.append .CreateParameter("@IDUsuario",3,1,4,IDUsuario)
.Parameters.append .CreateParameter("@NombreDeUsuario",200,2,40)
.Ejecutar
demás
'Reasigne valores a los parámetros de entrada (los parámetros de entrada y los parámetros de salida cuyos valores de parámetros no cambian en este momento no necesitan volver a declararse)
.Parámetros("@IDUsuario") = IDUsuario
.Ejecutar
terminar si
terminar con
Nombre de usuario = Nombre de usuario + MyComm(1) + "," 'Tal vez le guste usar almacenamiento en matriz
próximo
Establecer MyComm = Nothing
Como se puede ver en el código anterior: cuando se llama repetidamente al mismo procedimiento almacenado, solo necesita reasignar los parámetros de entrada cuyos valores han cambiado. Este método tiene múltiples parámetros de entrada y salida, y solo se llama a uno. cada vez. La cantidad de código se puede reducir considerablemente cuando cambia el valor del parámetro de entrada.
5. Procedimientos almacenados que tienen valores de retorno, parámetros de entrada y parámetros de salida al mismo tiempo. Como
se mencionó anteriormente, al llamar a un procedimiento almacenado, el orden en que se declaran los parámetros debe ser el mismo que el orden definido en el procedimiento almacenado. . Otro punto al que prestar especial atención: si el procedimiento almacenado tiene un valor de retorno y parámetros de entrada y salida, el valor de retorno debe declararse primero.
Para demostrar el método de llamada en este caso, mejoremos el ejemplo anterior. Todavía obtengo el nombre de usuario del usuario con ID 1, pero es posible que el usuario no exista (el usuario ha sido eliminado y el ID de usuario es un campo que aumenta automáticamente). El procedimiento almacenado devuelve diferentes valores dependiendo de si el usuario existe o no. En este punto, el procedimiento almacenado y el código ASP son los siguientes:
/*SP5*/
CREAR PROCEDIMIENTO dbo.getUserName
--Para profundizar la impresión de "orden", invierta el orden de definición de los dos parámetros siguientes.
@UserName salida varchar(40),
@ID de usuario int
como
establecer no contar en
comenzar
si @UserID es nulo, devuelve
seleccione @UserName=nombre de usuario
de dbo.[información de usuario]
donde ID de usuario = @ ID de usuario
si @@rowcount>0
regresar 1
demás
regresar 0
devolver
fin
go
'**Llamar a un procedimiento almacenado con valor de retorno, parámetros de entrada y parámetros de salida**
DIM MiComm,ID de usuario,Nombre de usuario
ID de usuario = 1
Establecer MyComm = Server.CreateObject ("ADODB.Command")
conMyComm
.ActiveConnection = MyConStr 'MyConStr es la cadena de conexión de la base de datos
.CommandText = "getUserName" 'Especifique el nombre del procedimiento almacenado
.CommandType = 4 'Indica que este es un procedimiento almacenado
.Prepared = true 'Requiere que los comandos SQL se compilen primero
'El valor de retorno debe declararse primero
.Parameters.Append .CreateParameter("RETURN",2,4)
'El orden de declaración de los dos parámetros siguientes también se invierte en consecuencia.
.Parameters.append .CreateParameter("@NombreDeUsuario",200,2,40)
.Parameters.append .CreateParameter("@IDUsuario",3,1,4,IDUsuario)
.Ejecutar
terminar con
si MiComun(0) = 1 entonces
Nombre de usuario = MiComun(1)
demás
Nombre de usuario = "Este usuario no existe"
terminar si
Set MyComm = Nothing
6. Procedimientos almacenados que devuelven parámetros y conjuntos de registros al mismo tiempo.
A veces, necesitamos procedimientos almacenados para devolver parámetros y conjuntos de registros al mismo tiempo. Por ejemplo, cuando utilizamos procedimientos almacenados para paginación, necesitamos devolver parámetros como este. como conjuntos de registros y datos totales al mismo tiempo. El siguiente es un procedimiento almacenado para paginación:
/*SP6*/
CREAR PROCEDIMIENTO dbo.getUserList
@iPageCount int SALIDA, --Número total de páginas
@iPage int, --Número de página actual
@iPageSize int: número de registros por página
como
establecer no contar en
comenzar
--Crear tabla temporal
crear tabla #t (ID int IDENTIDAD, campo de incremento automático
ID de usuario int,
nombre de usuario varchar(40))
--Escribir datos en una tabla temporal
insertar en #t
seleccione ID de usuario, nombre de usuario de dbo.[UserInfo]
ordenar por ID de usuario
: obtener el número total de registros
declarar @iRecordCount int
set @iRecordCount = @@rowcount
: determina el número total de páginas
SI @iRecordCount%@iPageSize=0
ESTABLECER @iPageCount=TECHO(@iRecordCount/@iPageSize)
DEMÁS
SET @iPageCount=CEILING(@iRecordCount/@iPageSize)+1
--Si el número de página solicitado es mayor que el número total de páginas, se mostrará la última página
SI @iPage > @iPageCount
SELECT @iPage = @iPageCount
- determina el principio y el final de la página actual
DECLARAR @iStart int --iniciar registro
DECLARAR @iEnd int --end registro
SELECCIONE @iStart = (@iPage - 1) * @iPageSize
SELECCIONAR @iEnd = @iStart + @iPageSize + 1
--Obtener el registro de la página actual
seleccione * de #t donde ID>@iStart e ID<@iEnd
--Eliminar tabla temporal
DROP TABLE #t
: devuelve el número total de registros
devolver @iRecordCount
fin
En el procedimiento almacenado anterior,
go
ingresa el número de página actual y el número de registros por página, y devuelve el conjunto de registros de la página actual, el número total de páginas y el número total de registros.Para ser más típico, el número total de registros se devuelve como valor de retorno. El siguiente es el código ASP que llama al procedimiento almacenado (se omite la operación de paginación específica):
'**Llamar al procedimiento almacenado de paginación**
DIM página ahora, tamaño de página, recuento de páginas, recuento de registros
Atenuar MyComm, MyRst
pagenow = Solicitud("pn")
'Función personalizada utilizada para verificar números naturales
si CheckNar(pagenow) = false entonces pagenow = 1
tamaño de página = 20
Establecer MyComm = Server.CreateObject ("ADODB.Command")
conMyComm
.ActiveConnection = MyConStr 'MyConStr es la cadena de conexión de la base de datos
.CommandText = "getUserList" 'Especifique el nombre del procedimiento almacenado
.CommandType = 4 'Indica que este es un procedimiento almacenado
.Prepared = true 'Requiere que los comandos SQL se compilen primero
'Valor de retorno (número total de registros)
.Parameters.Append .CreateParameter("RETURN",2,4)
'Parámetros de salida (número total de páginas)
.Parameters.Append .CreateParameter("@iPageCount",3,2)
'Parámetros de entrada (número de página actual)
.Parameters.append .CreateParameter("@iPage",3,1,4,pagenow)
'Parámetros de entrada (número de registros por página)
.Parameters.append .CreateParameter("@iPageSize",3,1,4,pagesize)
SetMyRst = .Ejecutar
terminar con
si MyRst.state = 0 entonces 'No se obtuvieron datos, MyRst está cerrado
recuento de registros = -1
demás
MyRst.close 'Nota: Para obtener valores de parámetros, primero debe cerrar el objeto del conjunto de registros
recuento de registros = MiComun(0)
recuento de páginas = MiComun(1)
si cint(pagenow)>=cint(pagecount) entonces pagenow=pagecount
terminar si
Establecer MyComm = Nada
'Mostrar registros a continuación
si recuento de registros = 0 entonces
Respuesta.Escribe "Sin registro"
elseif recuento de registros > 0 entonces
Miprimer.abierto
hacer hasta MyRst.EOF
...
bucle
'Lo siguiente muestra información de paginación
...
else 'recuento de registros=-1
Respuesta.Escribir "Error de parámetro"
end if
Con respecto al código anterior, solo hay un punto que debe explicarse: al devolver el conjunto de registros y los parámetros al mismo tiempo, si desea obtener los parámetros, primero debe cerrar el conjunto de registros y luego abrirlo cuando utilizando el conjunto de registros.
7. Procedimientos almacenados que devuelven múltiples conjuntos de registros
Lo primero que presenta este artículo son los procedimientos almacenados que devuelven conjuntos de registros. A veces, se requiere un procedimiento almacenado para devolver múltiples conjuntos de registros en ASP, ¿cómo obtener estos conjuntos de registros al mismo tiempo? Para ilustrar este problema, agregue dos campos a la tabla de información de usuario: usertel y usermail, y configure que solo los usuarios que hayan iniciado sesión puedan ver estos dos contenidos.
/*SP7*/
CREAR PROCEDIMIENTO dbo.getUserInfo
@userid int,
@checklogin bit
como
establecer no contar en
comenzar
si @userid es nulo o @checklogin es nulo, devuelve
seleccione nombre de usuario
de dbo.[usrinfo]
donde ID de usuario = @ ID de usuario
--Si es un usuario registrado, tome usertel y usermail
si @checklogin=1
seleccione usertel,usermail
de dbo.[información de usuario]
donde ID de usuario = @ ID de usuario
devolver
fin
irEl
siguiente es el código ASP:
'**Llamar a un procedimiento almacenado que devuelve múltiples conjuntos de registros**
Control DIM,ID de usuario,Nombre de usuario,Tel de usuario,Correo de usuario
Atenuar MyComm, MyRst
ID de usuario = 1
'checklogin() es una función personalizada para determinar si el visitante ha iniciado sesión
checklg = verificar inicio de sesión()
Establecer MyComm = Server.CreateObject ("ADODB.Command")
conMyComm
.ActiveConnection = MyConStr 'MyConStr es la cadena de conexión de la base de datos.CommandText = "getUserInfo" 'Especifique el nombre del procedimiento almacenado.CommandType = 4 'Indica que se trata de un procedimiento almacenado.Prepared = true 'Requiere que el comando SQL se compile primero.Parámetros .append .CreateParameter ("@userid",3,1,4,UserID)
.Parameters.append .CreateParameter("@checklogin",11,1,1,checklg)
SetMyRst = .Ejecutar
terminar con
Set MyComm = Nothing
'Obtiene el valor del primer conjunto de registros
Nombre de usuario = MiPrimero(0)
'Obtiene el valor del segundo conjunto de registros
si no MyRst no es nada entonces
Establecer MyRst = MyRst.NextRecordset()
TelUsuario = MiPrimero(0)
Correo de usuario = MiPrimero(1)
terminar si
Set MyRst = Nothing
En el código anterior, el método NextRecordset del objeto Recordset se utiliza para obtener múltiples conjuntos de registros devueltos por el procedimiento almacenado.
Hasta ahora, este artículo ha dado una explicación relativamente completa de varias situaciones en las que ASP llama a procedimientos almacenados. Finalmente, hablemos de los diferentes métodos para llamar a múltiples procedimientos almacenados en un programa ASP.
En un programa ASP, al menos los siguientes tres métodos son factibles para llamar a múltiples procedimientos almacenados:
1. Crear múltiples objetos Command
Atenuar MiComm
Establecer MyComm = Server.CreateObject ("ADODB.Command")
'Llamar al procedimiento almacenado uno
...
Establecer MiComm = Nada
Establecer MyComm = Server.CreateObject ("ADODB.Command")
'Llamar al procedimiento almacenado dos
...
Establecer MiComm = Nada
......
2. Cree únicamente un objeto Comando y borre sus parámetros al finalizar una llamada.
Atenuar MiComm
Establecer MyComm = Server.CreateObject ("ADODB.Command")
'Llamar al procedimiento almacenado uno
.....
'Borrar parámetros (asumiendo que hay tres parámetros)
MyComm.Parameters.eliminar 2
MyComm.Parameters.eliminar 1
MyComm.Parameters.eliminar 0
'Llamar al procedimiento almacenado dos y borrar los parámetros
...
Establecer MyComm = Nothing
En este momento, tenga en cuenta: el orden de borrado de parámetros es opuesto al orden de declaración de parámetros. No sé el motivo.
3. Utilice el método Actualizar de la recopilación de datos de Parámetros para restablecer el objeto Parámetro.
Atenuar MiComm
Establecer MyComm = Server.CreateObject ("ADODB.Command")
'Llamar al procedimiento almacenado uno
.....
'Restablecer todos los objetos de parámetros contenidos en la colección de datos de parámetros
MiComm.Parámetros.Actualizar
'Llamar al procedimiento almacenado dos
.....
Establecer MyComm = Nada
Generalmente se cree que crear objetos repetidamente es un método menos eficiente, pero después de realizar la prueba (la herramienta de prueba es Microsoft Application Center Test), los resultados son inesperados:
Método 2 >= Método 1 >> Método 3
La velocidad de ejecución del Método 2 Mayor o igual que el método 1 (hasta aproximadamente un 4% más), la velocidad de ejecución de estos dos métodos es mucho más rápida que la del método 3 (hasta un 130%), por lo que se recomienda utilizar el método 1 cuando hay muchos parámetros y utilice el método 1 cuando haya pocos parámetros 2.