ASP Conferencia 9: ASP y base de datos (4)
Autor:Eve Cole
Fecha de actualización:2009-05-30 19:54:56
En esta conferencia, presentaremos principalmente cómo usar parámetros y procedimientos almacenados.
1. Utilice el objeto Comando y el objeto Parámetro para transferir parámetros. Esta lección utilizará principalmente la base de datos Microsoft SQL Server7.0. Primero, cree un archivo de conexión AdoSQL7.asp para realizar una copia de seguridad. futuro.
<% 'AdoSQL7.asp
Opción explícita
Respuesta.Expira = 0
'Parte 1: Establecer una conexión
Dim Cnn, StrCnn
Establecer Cnn = Server.CreateObject ("ADODB.Connection")
StrCnn = "Proveedor=sqloledb; ID de usuario=sa; Contraseña=; Catálogo inicial=pubs; Fuente de datos=ICBCZJP"
Cnn.Abrir StrCnn
%>
Nota: Cuando lo utilice usted mismo, configure la Fuente de datos con el nombre de la máquina de su servidor de base de datos.
Además, cuando se usaba la base de datos Access en el pasado, era muy conveniente usar Microsoft Access97 para ver campos y datos. Sin embargo, cuando se usa la base de datos SQL Server, especialmente cuando se depuran scripts ASP, no en el servidor de la base de datos sino en otra máquina. necesario para ver campos y datos. Los datos deben instalarse por separado. Aquí tiene una herramienta: Msqry32.exe (Microsoft Query). Este archivo se instala con Office97 y generalmente se encuentra en el directorio "Microsoft OfficeOffice".
Ejemplo wuf70.asp:
<%@ IDIOMA="VBSCRIPT" %>
<!--#include file="AdoSQL7.asp"-->
<!--#include file="adovbs.inc"-->
<%' wuf70.asp
Dim cmdTest, prmTest, rsTest
'Crear objeto de comando
Establecer cmdTest = Server.CreateObject ("ADODB.Command")
'Los objetos Recordset y Command pueden conectarse a objetos Connection a través de la propiedad ActiveConnection.
cmdTest.ActiveConnection = CN
'Comando SQL: contiene dos parámetros, ¿se utiliza? expresar
cmdTest.CommandText = "Actualizar trabajos Establecer job_desc =? ¿Dónde job_id =?"
'Establece el tipo de comando para que sea una declaración SQL
cmdTest.CommandType = adCmdText
El atributo 'Preparado determina si se compila primero el comando SQL. Configurarlo en Verdadero puede acelerar la ejecución.
cmdTest.Preparado = Verdadero
'Crear objeto de parámetro
Establecer prmTest=cmdTest.CreateParameter("job_desc",adVarChar,adParamInput,50,"network")
'Agregar datos a la colección de datos de Parámetros
cmdTest.Parameters.Append prmTest
Establecer prmTest = cmdTest.CreateParameter("job_id",adSmallInt,adParamInput,,"12")
cmdTest.Parameters.Append prmTest
'Ejecutar modificaciones: no es necesario devolver resultados, simplemente use cmdTest.Execute
cmdTest.Ejecutar
'Restablecer parámetros y ejecutar: puede modificar otro dato
cmdTest.Parameters("job_id") = "1"
cmdTest.Parameters("job_desc") = "Prueba"
cmdTest.Ejecutar
'Restablecer parámetros para ejecutar
cmdTest("job_id") = "14"
cmdTest("job_desc") = "Finanzas"
cmdTest.Ejecutar
Establecer rsTest = Cnn.Execute("Seleccione job_id,job_desc de trabajos")
Mientras no sea rsTest.EOF
Respuesta.Escribir rsTest(0) & rsTest(1) & "<br>"
rsTest.MoveNext
Encaminarse a
Cnn.close: Establecer prmTest = Nada
Establecer cmdTest = Nada: Establecer Cnn = Nada
%>
analizar:
1. El método CreateParameter del objeto Command se utiliza para crear objetos de parámetros para comandos SQL o procedimientos almacenados. Hay cinco parámetros en total (los cinco parámetros son opcionales):
El primer parámetro: el nombre del objeto de parámetro;
El segundo parámetro: el tipo de datos del objeto de parámetro, hay demasiados tipos, consulte la ayuda de ADO, aquí adVarChar (valor de cadena), adSmallInt (entero con signo de 2 bytes);
El tercer parámetro: tipo de parámetro. Puede ser: adParamInput (indica un parámetro de entrada), adParamOutput (indica un parámetro de salida), adParamReturnValue (indica un valor de retorno), adParamUnknown (indica que no se puede determinar el tipo de parámetro), adParamInputOutput (indica un parámetro de entrada/salida);
El cuarto parámetro: la longitud de los datos del parámetro. Es mejor especificarlo como igual a la longitud del campo correspondiente en la base de datos para evitar errores al usarlo, especialmente cuando el tipo de datos es VarChar. tipo de fecha, no es necesario proporcionar este valor;
El quinto parámetro: el valor inicial de la configuración del parámetro.
2. El método cmdTest.Parameters.Append agrega un objeto Parameter a la colección de datos Parameters. En este ejemplo, también puede ver cómo utilizar varios parámetros.
3. Como puede ver en este ejemplo, solo necesita restablecer los parámetros de entrada para modificar otros datos, lo cual es muy conveniente. Esta idea es también uno de los métodos más utilizados en programación.
4. Para restablecer los parámetros, puede usar cmdTest.Parameters u omitirlo como cmdTest("job_id").
2. Uso de procedimientos almacenados en ASP. ¿Qué es un procedimiento almacenado? (Un procedimiento almacenado se encuentra en el servidor de la base de datos y es una colección de declaraciones SQL que pueden contener una o más declaraciones SQL. No forma parte de Cómo crear un procedimiento almacenado). El contenido de esta conferencia. Esta conferencia proporciona principalmente ejemplos para ilustrar cómo llamar a procedimientos almacenados en ASP.
Los beneficios de utilizar procedimientos almacenados son grandes. Los procedimientos almacenados son más eficientes que ejecutar comandos SQL en scripts ASP; pueden mejorar el rendimiento general y reducir la carga de la red (reduciendo la interacción entre el servidor de red y el servidor de datos); y mejorar la flexibilidad del código, etc.
(1) Uso de parámetros de entrada en el procedimiento almacenado El procedimiento almacenado utilizado en este ejemplo es "byroyalty" que viene con SQL Server 7.0. La declaración SQL que contiene es muy simple. No es más que un CREATE PROCEDURE byroyalty adicional y una entrada. El parámetro es @porcentaje:
CREAR PROCEDIMIENTO byroyalty @percentage int
COMO
seleccione au_id del títuloautor
donde títuloautor.royaltyper = @porcentaje
Ejemplo wuf71.asp
<% @LANGUAGE = VBScript %>
<!--#include file="AdoSQL7.asp"-->
<!--#include file="adovbs.inc"-->
<% 'wuf71.asp
Dim cmdTest, prmTest, rsTest
Establecer cmdTest = Server.CreateObject ("ADODB.Command")
cmdTest.CommandText = "byroyalty" 'Nombre del procedimiento almacenado
'Establece el tipo de comando como procedimiento almacenado
cmdTest.CommandType = adCmdStoredProc
'Crear objeto de parámetro
Establecer prmTest = Server.CreateObject("ADODB.Parameter")
'El atributo tipo corresponde al segundo parámetro en wuf70.asp
prmTest.Type = adInteger 'Entero con signo de 4 bytes' El atributo de dirección corresponde al tercer parámetro en wuf70.asp
prmTest.Direction = adParamInput
'El atributo de valor corresponde al quinto parámetro en wuf70.asp
prmTest.Valor = 30
cmdTest.Parameters.Append prmTest
Establecer cmdTest.ActiveConnection = Cnn
'Necesita devolver un conjunto de registros, así que use Set rsTest = cmdTest.Execute
Establecer rsTest = cmdTest.Execute
Mientras no sea rsTest.EOF
Respuesta.Escribir rsTest(0) & "<br>"
rsTest.MoveNext
Encaminarse a
CNN.cerrar
Establecer rsTest = Nada: Establecer prmTest = Nada
Establecer cmdTest = Nada: Establecer Cnn = Nada
%>
La propiedad CommandText puede especificar un comando SQL, un procedimiento almacenado o un nombre de tabla.
En este ejemplo, la creación de un objeto Parameter es ligeramente diferente de wuf70.asp. De hecho, si observa con atención, el significado es similar. Hay dos atributos no utilizados en este ejemplo: prmTest.Name, prmTest.Size, más Type, Direction. y Valor, correspondiente a los cinco parámetros en wuf70.asp.
(2) Cuando utilice parámetros de salida para obtener un registro o calcular un valor de una tabla de base de datos, debe utilizar un procedimiento almacenado que devuelva parámetros de salida. Por ejemplo, primero cree un nuevo procedimiento almacenado OUTemploy en la biblioteca pubs de SQL Server. Este procedimiento almacenado necesita ingresar dos fechas y luego generar un valor máximo.
CREAR PROCEDIMIENTO OUTemploy
(
@job_lvl tinyint SALIDA,
@hire_date1 fecha y hora,
@hire_date2 fecha y hora
)
COMO
seleccione @job_lvl = MAX(job_lvl) del empleado
donde fecha_contratación >= @fecha_contratación1 y fecha_contratación <= @fecha_contratación2
Hay varias formas de crear procedimientos almacenados:
1. Utilice Enterprise Manager de Microsoft SQL Server. Después de abrirlo, ábralo en el directorio de árbol de la izquierda: Raíz de consola – Servidores Microsoft SQL – Grupo de SQL Server – ICBCZJP (Windows NT) – bases de datos – pubs – procedimiento almacenado – Nuevo procedimiento almacenado. Ingrese al procedimiento almacenado Finalmente, también se puede realizar la detección gramatical en él;
2. Usando el Analizador de consultas de Microsoft SQL Server, primero conéctese al servidor de la base de datos y seleccione la base de datos pubs. Ingrese el procedimiento almacenado arriba y haga clic en Ejecutar consulta (o presione F5);
3. Usando VB6.0, después de abrir el menú "Ver"/"Ventana de visualización de datos", haga clic derecho en "Enlace de datos"/"Nuevo enlace de datos";
4. Utilice un script ASP para crear un procedimiento almacenado, por ejemplo wuf75.asp:
<% @LANGUAGE = VBScript %>
<!--#include file="AdoSQL7.asp"-->
<!--#include file="adovbs.inc"-->
<% 'wuf75.asp
DimStrSQL
'Nota: & Chr(10) & Chr(13) son completamente innecesarios, principalmente para una buena apariencia.
StrSQL="CREAR PROCEDIMIENTO OUTemploy ( @job_lvl tinyint SALIDA, " & Chr(10) & Chr(13) &_
"@hire_date1 fecha y hora, @hire_date2 fecha y hora) AS " & Chr(10) & Chr(13) &_
"seleccione @job_lvl = MAX(job_lvl) del empleado" &_
"donde fecha_contratación >= @fecha_contratación1 y fecha_contratación <= @fecha_contratación2"
Cnn.Ejecutar StrSQL
Response.Write "Crear procedimiento almacenado correctamente"
Cnn.close: Establecer Cnn = Nada
%>
Una vez creado el procedimiento almacenado, además de usar el menú, también puede usar la instrucción SQL "Eliminar procedimiento OUTemploy" para eliminarlo.
Ejemplo wuf72.asp: envíe los parámetros de entrada requeridos al procedimiento almacenado y obtenga los resultados de salida.
<% @LANGUAGE = VBScript %>
<!--#include file="AdoSQL7.asp"-->
<!--#include file="adovbs.inc"-->
<% 'wuf72.asp
Dim cmdTest, prmTest
Establecer cmdTest = Server.CreateObject ("ADODB.Command")
cmdTest.ActiveConnection = CN
cmdTest.CommandText = "OUTemploy" 'Nombre del procedimiento almacenado
cmdTest.CommandType = adCmdStoredProc
'Crear objeto de parámetro
Establecer prmTest = cmdTest.CreateParameter("job_lvl",adTinyInt,adParamOutput)
cmdTest.Parameters.Append prmTest
'adTinyInt - entero con signo de 1 byte
'adDbDate - valor de fecha (aaaammdd)
Establecer prmTest = cmdTest.CreateParameter("hiredate1",adDBDate,adParamInput,,"1993-05-09")
cmdTest.Parameters.Append prmTest
Establecer prmTest = cmdTest.CreateParameter("hiredate2",adDBDate,adParamInput,,"1994-02-01")
cmdTest.Parameters.Append prmTest
cmdTest.Ejecutar
'Las siguientes tres expresiones tienen el mismo significado
Respuesta.Escribir cmdtest("job_lvl") & "<br>"
Respuesta.Escribir cmdTest.Parameters("job_lvl") & "<br>"
Respuesta.Escribir cmdTest.Parameters("job_lvl").Valor
CNN.cerrar
Establecer prmTest = Nada
Establecer cmdTest = Nada: Establecer Cnn = Nada
%>
(3) Utilice el parámetro de código de retorno para utilizar la instrucción Return para devolver diferentes códigos de retorno del procedimiento almacenado. Por ejemplo, el siguiente procedimiento almacenado primero obtiene un conjunto de registros y luego devuelve 1 si hay una empleada llamada Margaret; devuelve 0.
Crear procedimiento Returnemploy
COMO
seleccione emp_id, fname del empleado
Si existe (Seleccione fname del empleado donde fname='Margaret')
Regresar(1)
Demás
Volver(0)
Ejemplo wuf73.asp
<% @LANGUAGE = VBScript %>
<!--#include file="AdoSQL7.asp"-->
<!--#include file="adovbs.inc"-->
<% 'wuf73.asp
Dim cmdTest, prmTest, rsTest
Establecer cmdTest = Server.CreateObject ("ADODB.Command")
cmdTest.ActiveConnection = CN
cmdTest.CommandText = "Returnemploy" 'Nombre del procedimiento almacenado
cmdTest.CommandType = adCmdStoredProc
Establecer prmTest = cmdTest.CreateParameter("ReturnValue",adInteger,adParamReturnValue)
cmdTest.Parameters.Append prmTest
Establecer rsTest = cmdTest.Execute()
Mientras no sea rsTest.EOF
Respuesta.Escribir rsTest(0) & " ][ " & rsTest(1) & "<br>"
rsTest.MoveNext
Encaminarse a
rsTest.Close: Establecer rsTest = Nada
'Antes de devolver cmdtest("ReturnValue"), rsTest debe cerrarse primero; de lo contrario, el resultado será incorrecto
Si cmdtest("ReturnValue") = 1 Entonces
Respuesta.Escriba "Existe este empleado"
Demás
Respuesta.Escriba "No existe tal empleado"
Terminar si
CNN.cerrar
Establecer prmTest = Nada
Establecer cmdTest = Nada: Establecer Cnn = Nada
%>
3. Cómo procesar big data Los "big data" aquí se refieren principalmente a los campos Texto (texto grande) e imagen (imagen), cuyos datos no se pueden obtener correctamente utilizando el método descrito anteriormente. Primero debe usar Size = rsTest(0).ActualSize para obtener la longitud real del valor del campo y luego usar rsTest(0).GetChunk(Size) para obtener los datos. En el uso real, dado que estos campos son relativamente grandes, para ahorrar y utilizar racionalmente los recursos del servidor, generalmente se adopta la lectura segmentada. Ejemplo wuf74.asp:
<% @LANGUAGE = VBScript %>
<!--#include file="AdoSQL7.asp"-->
<!--#include file="adovbs.inc"-->
<% ' wuf74.asp
Dim StrSQL, rsTest
'pr_info es un campo de texto
StrSQL = "Seleccione pr_info, pub_id de pub_info"
Establecer rsTest = Cnn.Execute (StrSQL)
Dim BasicSize, BeginSize, LText
Hacer mientras no rsTest.EOF
Respuesta.Escribir rsTest(1) & "<br>"
'Lee 1024 bytes cada vez
Tamaño básico = 1024
Tamaño inicial = 0
Mientras que BeginSize <rsTest(0).ActualSize
LText = rsTest(0).GetChunk(BasicSize)
Tamaño inicial = Tamaño inicial + Tamaño básico
'Salida al cliente segmento por segmento
Respuesta.Escribir LText
Encaminarse a
Respuesta.Escribe "<br><br>"
rsTest.MoveNext
Bucle
CNN.cerrar
Establecer rsTest = Nada: Establecer Cnn = Nada
%>
En este ejemplo, se lee un máximo de 1024 bytes cada vez y los datos se leen varias veces. Por el contrario, si escribe big data en la base de datos, el método es similar al anterior, pero en lugar de usar el método GetChunk, usa el método AppendChunk:
rsTest(0).AppendChunkLtext
Nota: Finalmente, presentaré un pequeño truco sobre la base de datos de SQL Server. Si se ha encontrado con esta situación: los datos chinos en la base de datos se muestran como caracteres confusos, no entre en pánico. Sólo necesita ir a mi sitio para descargar sqlsrv32.dll y sobrescribir el archivo con el mismo nombre en "C:WindowsSystem". La fuente del problema es el controlador de SQL Server, que normalmente ocurre en Windows 98 Second Edition (el número de versión del controlador de SQL Server es 3.70.06.23) o Windows 2000 o cuando está instalado MDAC2.5 (el número de versión es 3.70.08.20). .