lunes, marzo 03, 2008

ASP en capas: Acceso a Datos

El principal punto a proteger en una aplicación Web es la base de datos. En este sentido hay que tener en cuenta que, cuanto más rápido liberemos la conexión, más rápida será nuestra aplicación. Una aplicación Web rápida es indudablemente más robusta que otra que tarda más tiempo en ejecutar.

Para recuperar datos y mostrarlos a los usuarios generalmente se utiliza un recordset más o menos así:
While not RS.EOF Then
Response.Write(...)
Wend
Este método no sólo es lento sino que además estamos utilizando, en la capa de presentación, un objeto de la capa de datos.

Para solucionar esto hice la clase "clsSql" con la que podemos ejecutar una consulta y obtendremos un Array de dos dimensiones donde la primera son los campos y la segunda son los registros. Para el resto de las operaciones en las que no se obtienen datos, debemos usar el clásico CONN.EXECUTE(query).

La clase tiene cuatro métodos solamente:
Public Sub Conectar (byRef Conn, ByVal ConnectionString)
Para conectarse a la base de datos.

Public Sub Desconectar (byRef Conn)
Para liberar la conexión.

Public Sub EjecutarQuery(ByRef Conn, ByVal Query, ByRef Resultado)
Este método ejecuta un "Query" en la conexión indicada y devuelve un Array con los datos obtenidos. Si no obtiene datos entonces "Resultado" estará vacío.

Public Sub EjecutarQueryPaginado(ByRef Conn, ByVal Query, ByRef Resultado, ByVal TamanoPagina, ByRef Pagina, ByRef CantPaginas, ByRef CantReg)
Este método ejecuta un "Query" en la conexión indicada y devuelve un Array conteniendo los datos correspondientes a la "Pagina" indicada teniendo en cuenta en "TamanoPagina". También devuelve la cantidad de páginas posibles y la cantidad de registros totales. Si el valor proporcionado de "Pagina" es inválido, lo modifica por el correcto.

Un ejemplo de uso de esta clase es:
Dim Bases
Dim conn
Dim arrResultado

set Bases = new clsSQL
Bases.Conectar(conn, "File DSN=BaseDeDatos.dsn")
Bases.EjecutarQuery(conn, "Select IdUsuario, Email from usuarios", arrResultado)
Bases.Desconectar(conn)
set clsSQL = Nothing

...

Dim a
If IsArray(arrResultado) Then 'Si arrResultado no es un array es que no se obtuvieron datos
For a = 0 to Ubound(arrResultado,2)
...
IdUsuario: <%=arrresultado(0,a)%>

Email: <%=arrresultado(1,a)%>
... Next
End If

Les dejo la clase para que la descarguen: clsSql
La URL del post anterior: ASP en capas: obtener valores por QueryString