Hay muchos artículos sobre ASP y procedimientos almacenados (Procedimientos almacenados), pero dudo que los autores realmente los hayan practicado. 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. Aunque no se puede garantizar que el siguiente texto sea absolutamente correcto, 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:
En primer lugar, mejorar 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 realizan las siguientes clasificaciones simples según la entrada y salida del proceso 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 la sintaxis de 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 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 no se puede determinar el tipo del parámetro CommandText
1 indica que CommandText es un tipo de comando general
2 indica que el parámetro CommandText es un nombre de tabla existente
4 Indica que el parámetro CommandText es el nombre de un procedimiento almacenado
. El procedimiento almacenado también se puede llamar a través del objeto Connection o del objeto Recordset. Los métodos son los siguientes:
'**Llamar al procedimiento almacenado a través del objeto Connection**.
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 la cadena de conexión de la base de datos, 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:
'**Llame al procedimiento almacenado a través del comando. objeto**
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, necesita usar la colección Parameters para declarar los parámetros:
'**Llame al procedimiento almacenado con el 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. Normalmente lo configuro en "RETURE";
El segundo parámetro (2) indica el tipo de datos del parámetro. Consulte la referencia de ADO para conocer los códigos de tipo específicos que se detallan 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 tomar valores 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: No se puede determinar el tipo; 1: Parámetros de entrada; 2: Parámetros de entrada; 3: Parámetros de entrada o salida 4: Valor de retorno
Se debe decir que el código ASP proporcionado anteriormente es el código más complejo; De hecho,
establezca Mypara = MyComm.CreateParameter("RETURN",2,4)
MyComm.Parameters.Append MyPara
se puede simplificar a
MyComm.Parameters.Append MyComm.CreateParameter("RETURN",2,4)
e 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 entrada 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:
'**Llamar 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 parámetros de entrada, 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 parecerá 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")
con MyComm
.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
.Parameters.append .CreateParameter("@IDUsuario",3,1,4,IDUsuario)
.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, solo necesita cambiar los parámetros de entrada y obtendrá diferentes parámetros de entrada:
'**Llame 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 este es un procedimiento almacenado
.Prepared = true 'Requiere que los comandos SQL se compilen primero
si ID de usuario = 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 momento, 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
.Preparado = verdadero '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
Establezca MyComm = Server.CreateObject("ADODB.Command")
con MyComm
.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
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")
con MyComm
.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
.Parameters.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. Cree múltiples objetos de comando.
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 solo un objeto Comando y, al finalizar una llamada, borre su parámetro
DIM MyComm
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 de Parámetro
DIM MyComm.
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 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 es mayor o igual que la del método 1 (hasta aproximadamente un 4% más alta). 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%). método 1 cuando hay muchos parámetros. Si no, utilice el método 2.
Me tomó un día finalmente poner por escrito algo de mi experiencia superficial en llamar a procedimientos almacenados en ASP. Entre ellos, de algunos solo conozco los efectos pero no las causas, y algunos pueden estar equivocados, pero todos ellos se deben a mi práctica personal. Por favor, acéptenlo con espíritu crítico, lectores. Si tiene alguna opinión diferente, hágamelo saber. Gracias de antemano.