Cómo implementar la arquitectura ASP de tres niveles
1. Cree la siguiente tabla de base de datos en el sistema de base de datos:
Empleado: EMPLID char (5) no nulo,
Nombre char (10) no nulo. ,
Género char (1) no nulo,
Puntuación int no nula
Esta tabla almacena información de los empleados y puntuaciones de las pruebas. Para simplificar, solo contiene números. , nombre y sexo, y solo una prueba, EMPLID es la clave principal.
2. Cree una biblioteca de enlaces dinámicos
Inicie VB (aquí está VB como ejemplo, puede usar cualquier herramienta de desarrollo que desee que admita la interfaz ActiveX para el desarrollo), cree una. Nuevo proyecto, el tipo de proyecto es ActiveX
DLL. Cree una nueva clase llamada Empleado en el proyecto. Puedes visualizar la clase
Builder. Puede agregar propiedades y métodos a una clase visualmente en el generador de clases o editarlos manualmente. Primero complete la propiedad EMPLID de la siguiente manera:
Privado msEMPLID como cadena
Propiedad Let EMPLID(sEMPLID como cadena)
msEMPLID=sEMPLID
Propiedad final
Propiedad Obtener EMPLID() como cadena
EMPLID=msEMPLID
Propiedad final
En términos generales, generalmente diga: cada propiedad debe tener un método Property
Let y Property
Get. Métodos, llamados al asignar valores a propiedades y leer valores de propiedad. Si una propiedad solo se asigna y nunca se lee (lo que suele ser el caso de las propiedades que corresponden a la clave primaria de una tabla de base de datos), se puede omitir el método Property
Get y el Property
El método Let no se puede omitir. Puede crear tres propiedades más: Nombre, Género y Puntuación siguiendo el procedimiento anterior.
Luego cree el siguiente método:
Public Sub Create(EMPLID as string)
dim conn as new Connection
dim rs as new Recordset
dim sql as string
'Suponiendo que creó un DSN en el panel de control, el atributo de cadena de conexión
'también puede ser una cadena sin dsn
conn .ConnectionString= "dsn=dsnname;uid=nombre de usuario;contraseña=pwd"
conn.open
sql="seleccione * de Empleado donde EMPLID='" & EMPLID & "' "
con rs
.open sql,conn,1,3
si .eof y .bof entonces
salir de sub
else
msEMPLID=trim(.Fields("EMPLID"))
msName= trim(.Fields("Nombre"))
msGender=trim(.Fields("Gender"))
msScore=.Fields("Score")
finaliza si
.close p> p>
terminar con
set rs=nada
conn.close
set conn=nada
End Sub
p>
Aquí se crea un objeto Empleado basado en EMPLID. Tenga en cuenta que los valores en la base de datos se asignan a tres variables privadas, en lugar de asignarse directamente a atributos.
A continuación creamos otra clase Empleados y completamos los siguientes métodos:
colQualifiedList privado como nueva Colección
mnCurrentIndex privado como número entero
Public Sub GetQualifiedList()
dim conn como nueva conexión
dim rs como nuevo conjunto de registros
dim sql como cadena
'Supongamos que Cuando crea un DSN en el panel de control, la cadena de conexión es la misma que la cadena de conexión .ConnectionString="dsn=dsnname;uid=username;password=pwd"
conn.open
con rs
.open sql, conn,1,3
si .eof y .bof entonces
salir de sub
p>
else
hacerlo mientras no .eof
dim oEmployee como nuevo Empleado
oEmployee.Create trim(.Fields("EMPLID"))
colQualifiedList.Add oEmployee
set oEmployee=nada
bucle
finaliza si
.close
p>
finaliza con
.p>
terminar con
establecer rs=nada
conn.Fields("EMPLID ").cerrar
establecer oEmployee=nada
bucle
finaliza si
.close
finaliza con
.close
set conn=nada p>
End Sub
Primero, tenga en cuenta que la sintaxis para crear instancias de clase en VB es tenue
oEmpleado como nuevo
Empleado, como usted Como veremos más adelante, la sintaxis para crear instancias de clases en ASP es diferente. Este método recupera números de trabajo de empleados con calificaciones mayores o iguales a 60, crea un objeto Empleado a partir de ellos y luego agrega este objeto a un objeto de colección privada.
Las siguientes dos funciones iterarán sobre los elementos de la colección:
Función pública GetFirst() as Employee
si colQualifiedList.count>0 entonces
mnCurrentIndex= 1
set GetFirst=colQualifiedList.Item(1)
else
set GetFirst=nada
end if
Función final
Función pública GetNext() como Empleado
mnCurrentIndex=mnCurrentIndex+1
si mnCurrentIndex>colQualifiedList.count entonces
establecer GetNext=nada
finalizar si
Función final
Función pública GetNext()
else
set GetNext =colQualifiedList.Item(mnCurrentIndex)
End if
End Function
Quizás dirás, ¿por qué no declarar la colección como pública para que pueda ¿Se puede hacer referencia directamente en ASP? Podría decir: "¿Por qué no declarar la colección como Pública para poder hacer referencia a ella directamente en ASP? Sí, esto es posible y más fácil de programar, pero rompe el principio de encapsulación. Porque el formato de almacenamiento de datos es Cosas en el negocio La capa lógica no tiene nada que ver con la capa de interfaz de usuario. Supongamos que un día, por diversas razones, abandona el diseño del almacenamiento de recopilación de datos y utiliza matrices o conjuntos de registros (Recordset) para el almacenamiento. Entonces solo necesita modificar los dos GetFirst. y la función GetNext, no es necesario modificar la capa de la interfaz de usuario en absoluto.
Después de crear este tipo de archivo, guarde el archivo del proyecto como test.vbp y seleccione la opción Crear test.dll en. menú de archivos para compilarlo
p>3. Registre la biblioteca de enlaces dinámicos
Inicie Microsoft Transaction Server en el servidor web
(Inicio - Windows). NT
Optionpack4--Internet Information Server--Servicio de Internet
Administrador), expanda Microsoft Transaction Server--Computadora--Mi PC--Paquete
Instalado , haga clic derecho y seleccione Nuevo--Paquete--Crear paquete vacío--Crear paquete vacío.
Paquete: crear
paquete vacío, ingrese el nombre del paquete Prueba (aquí Prueba es un nombre opcional, no necesariamente el mismo nombre que la DLL), OK-Usuario interactivo: el
Inicio de sesión actual
usuario--Finalizar Haga doble clic en Componente de prueba, haga clic con el botón derecho en Componente-Nuevo-Componente-Instalar nuevo
componente(s) - Agregar
.Archivo, seleccione el archivo DLL que acaba de compilar, MTS encontrará que hay dos clases en el DLL: Empleado y Empleados. La DLL ahora está registrada.
4. Escribir programa ASP
Lista de empleados calificados
< borde de la tabla = 1 espacio entre celdas = 0 relleno de celda = 0>
Lista de empleados calificados
<table border=1 espacio entre celdas =1 lt;/td>
<%
conjunto oEmployees= server.createobject("Test.Employees" )
oEmployees.GetQualifiedList
establecer oEmployee=oEmployees.GetFirst()
hacer mientras no oEmployee no es nada
p>
%>
<.Género%>
<%
establecer oEmployee=oEmployees.GetNext()
bucle
% >
Tenga en cuenta que en ASP, la sintaxis para crear se establece una instancia de clase
oEmployees=server.createobject("Test.Employees"), donde Prueba es el nombre de la DLL y Empleados es el nombre de la clase;
De Por supuesto, si el valor de retorno de la función es un objeto, también puede usar una sintaxis como set oEmployee=oEmployees.GetFirst().
En este punto, se ha completado una solicitud completa de tres niveles. Echemos un vistazo si desea cambiar la definición de "transferencia": solo los primeros 100 dígitos del resultado se consideran calificados. necesita modificar el programa. Realice estos cambios.
De hecho, si su sistema de base de datos es SQL Server, solo necesita cambiar la instrucción SQL a:
sql="select top 100 EMPLID from Employee order by Score desc "Eso es todo, incluso nosotros solo necesitamos Make los siguientes cambios en GetQualifiedList:
sql="select EMPLID from Employee order by Score desc"
with rs
.open sql, conn, 1, 3
si .eof y .bof entonces
salir de sub
else
i=1
hacer while (no .eof) y (i<=100)
dim oEmployee as new Employee
oEmployee.Create trim(.Fields("EMPLID"))
colQualifiedList.Add oEmployee
set oEmployee=nada
i=i+1
loop
end if
.close
terminar con
...
Luego recompila la DLL y regístrala, y el programa ASP no necesita ser modificado en absoluto .
No es necesario modificar el programa ASP en absoluto.