Várias maneiras de o ASP chamar procedimentos armazenados com parâmetros
Recentemente, muitos amigos perguntaram sobre como chamar procedimentos armazenados. Aqui está uma breve introdução a várias maneiras de o ASP chamar procedimentos armazenados com parâmetros.
1. Este também é o método mais simples, com dois parâmetros de entrada e nenhum valor de retorno:
definir conexão = server.createobject("adodb.connection")
conexão.abrir algumDSN
Connection.Execute "procname varvalue1, varvalue2"
'Limpa todos os objetos e libera recursos
conexão.fechar
definir conexão = nada
2. Se desejar retornar o conjunto de registros:
definir conexão = server.createobject("adodb.connection")
conexão.abrir algumDSN
definir rs = server.createobject("adodb.recordset")
rs.Open "Exec procname varvalue1, varvalue2",connection
'Limpa todos os objetos e libera recursos
rs.fechar
conexão.fechar
setrs = nada
definir conexão = nada
3. Nenhum dos dois métodos acima pode ter um valor de retorno (exceto Recordset). Se desejar obter o valor de retorno, você precisará usar o método Command.
Em primeiro lugar, existem dois tipos de valores de retorno. Uma é retornar diretamente um valor no procedimento armazenado, assim como o valor de retorno da função de C e VB, a outra é retornar vários valores, e os nomes das variáveis para armazenar esses valores precisam ser especificados primeiro nos parâmetros de chamada; .
Este exemplo precisa lidar com vários parâmetros, parâmetros de entrada, parâmetros de saída, conjuntos de registros de retorno e um valor de retorno direto (está completo o suficiente?)
O procedimento armazenado é o seguinte:
use pubs
GO
– Cria um procedimento armazenado
cria procedimento sp_PubsTest
– define três variáveis de parâmetro, preste atenção na terceira, a marca especial é para saída
@au_lname varchar (20),
@intID int,
@intIDOut int OUTPUT
AS
SELECT @intIDOut = @intID + 1
SELECT *
DOS autores
WHERE au_lname LIKE @au_lname + '%'
--Retorna um valor diretamente
RETURN @intID + 2
O programa asp que chama esse procedimento armazenado é o seguinte:
<%@ Language=VBScript %>
<%
Dim CmdSP
Dimado RS
Dim adCmdSPStoredProc
Dim adParamReturnValue
Escurecer adParaminput
Escurecer adParamOutput
Dim adInteger
Dim iVal
Dim oVal
Dim adoField
Dim adVarChar
'Esses valores são constantes predefinidas em VB e podem ser chamadas diretamente, mas não são predefinidas em VBScript
adCmdSPStoredProc = 4
adParamReturnValue = 4
adParaminput = 1
adParamOutput = 2
anúncioInteiro = 3
adVarChar = 200
iVal = 5
oVal = 3
'Cria um objeto de comando
set CmdSP = Server.CreateObject("ADODB.Command")
'Cria um link
CmdSP.ActiveConnection = "Driver={SQL Server};server=(local);Uid=sa;Pwd=;Database=Pubs"
'Definir nome de chamada do objeto de comando
CmdSP.CommandText = "sp_PubsTest"
'Defina o tipo de chamada de comando como um procedimento armazenado (adCmdSPStoredProc = 4)
CmdSP.CommandType = adCmdSPStoredProc
'Adicionar parâmetros ao objeto de comando
'Define o procedimento armazenado para ter um valor de retorno direto e é um número inteiro. O valor padrão é 4.
CmdSP.Parameters.Append CmdSP.CreateParameter("RETURN_VALUE", adInteger, adParamReturnValue, 4)
'Define um parâmetro de entrada de caracteres
CmdSP.Parameters.Append CmdSP.CreateParameter("@au_lname", adVarChar, adParaminput, 20, "M")
'Define um parâmetro de entrada inteiro
CmdSP.Parameters.Append CmdSP.CreateParameter("@intID", adInteger, adParamInput, , iVal)
'Define um parâmetro de saída inteiro
CmdSP.Parameters.Append CmdSP.CreateParameter("@intIDOut", adInteger, adParamOutput, oVal)
'Executa o procedimento armazenado e obtém o conjunto de registros retornado
Definir adoRS = CmdSP.Execute
'Imprime cada registro Os campos são virtuais e podem ser ignorados.
Embora não seja adoRS.EOF
para cada adoField em adoRS.Fields
Response.Write adoField.Name & "=" & adoField.Value & "<br>" & vbCRLF
Próximo
Resposta.Escreva "<br>"
adoRS.MoveNext
Wend
'Imprime dois valores de saída:
Response.Write "<p>@intIDOut = " & CmdSP.Parameters("@intIDOut").Value & "</p>"
Response.Write "<p>Valor de retorno = " & CmdSP.Parameters("RETURN_VALUE").Value & "</p>"
'Limpeza geral
Definir adoRS = nada
Definir CmdSP.ActiveConnection = nada
Definir CmdSP = nada
%>
-------------------------------------------------- -------------------------------------------------- --------------------------------
Chamar o procedimento armazenado do sql server em asp pode acelerar a velocidade de execução do programa
1. Chame o armazenamento O método geral do processo assume que existe um procedimento armazenado dt_users no sql server:
CRIAR PROCEDIMENTO [dbo].[dt_users]
COMO
selecione * dos usuários
retornar
IR
O primeiro método não é usar o objeto de comando, mas usar diretamente o objeto recordset.
definir rs=server.createobject("adodb.recordset")
sql="exec dt_users"
rs.open sql,conn,1,1 para que o segundo método seja usar o objeto de comando
definir comm=server.createobject("adodb.command")
comm.commantype=4
definir comm.activeconnection=conn
comm.commandtext="dbo.dt_users"
definir rs=server.createobject("adodb.recordset")
rs.open comm,,1,1
2. Passar parâmetros para o procedimento armazenado Se não houver parâmetros no procedimento armazenado, mas uma única instrução SQL, a vantagem de chamar o procedimento armazenado não será mostrada!
Por exemplo, para uma consulta bbs, você pode consultar por autor e tópico! Então você pode criar um procedimento armazenado da seguinte maneira:
A palavra-chave do parâmetro é a palavra-chave e escolha é o método de seleção da consulta.
CRIAR PROCEDIMENTO [dbo].[dt_bbs]
@palavra-chave varchar(20)=nulo,
@escolha int=nulo
como
se @escolher=1
selecione * de bbs onde nome como @keyword
outro
selecione * de bbs onde assunto como @keyword
retornar
ir
Desta forma, quando chamamos o procedimento armazenado, precisamos apenas passar os parâmetros, ao invés de escrever um programa em asp e utilizar o primeiro método:
definir rs=server.createobject("adodb.recordset")
sql="exec dt_bbs '"&palavra-chave&"',"&escolha&""
rs.open sql,conn,1,1
Use o segundo método:
definir comm=server.createobject("adodb.command")
comm.commantype=4
comm.Parameters.append comm.CreateParameter("@keyword",adChar,adParamInput,50,keyword)
comm.Parameters.append comm.CreateParameter("@keyword",adInteger,adParamInput,,choose)
definir comm.activeconnection=conn
comm.commandtext="dbo.dt_bbs"
definir rs=server.createobject("adodb.recordset")
rs.CursorType=3
rs.open comm,,1,1