Acceder a una base de datos con ASP
Para consultar una base de datos desde ASP clásico necesitamos abrir una conexión, ejecutar una sentencia SQL, recorrer los registros obtenidos y cerrar todos los recursos.
En este ejemplo utilizaremos ADO, el objeto ADODB.Connection y un archivo de Microsoft Access con extensión .mdb.
Abrir la conexión
Sección titulada «Abrir la conexión»Creamos la conexión mediante Server.CreateObject() y obtenemos la ruta física del archivo con Server.MapPath().
Dim conexionDim rutaBaseDatosDim cadenaConexion
rutaBaseDatos = Server.MapPath("prueba.mdb")cadenaConexion = "Provider=Microsoft.Jet.OLEDB.4.0;" & _ "Data Source=" & rutaBaseDatos & ";"
Set conexion = Server.CreateObject("ADODB.Connection")conexion.Open cadenaConexionEl proveedor Microsoft.Jet.OLEDB.4.0 se utiliza habitualmente con archivos .mdb antiguos. En servidores modernos puede ser necesario instalar y usar Microsoft.ACE.OLEDB.12.0 o el proveedor compatible disponible en el entorno.
El archivo de la base de datos no debería almacenarse en una carpeta pública. La identidad que ejecuta la aplicación debe disponer únicamente de los permisos necesarios.
Ejecutar la consulta SQL
Sección titulada «Ejecutar la consulta SQL»Una vez abierta la conexión, ejecutamos una consulta y guardamos el resultado en un objeto ADODB.Recordset.
Dim registrosDim sql
sql = "SELECT valor FROM Datos"Set registros = conexion.Execute(sql)Es preferible indicar los campos requeridos en lugar de utilizar SELECT *. Si la consulta incorpora información procedente del usuario, debemos usar parámetros mediante ADODB.Command para evitar una inyección SQL.
Recorrer el Recordset
Sección titulada «Recorrer el Recordset»La propiedad EOF indica que hemos llegado al final del conjunto de resultados. Mientras queden filas, podemos leer el campo valor y avanzar con MoveNext.
Do Until registros.EOF Response.Write(Server.HTMLEncode(CStr(registros("valor")))) Response.Write("<br>")
registros.MoveNextLoopLa llamada a MoveNext es imprescindible. Si no avanzamos el cursor, el bucle seguirá procesando la misma fila indefinidamente.
Server.HTMLEncode() evita que un valor almacenado en la base de datos se interprete como código HTML al escribirlo en la respuesta.
Cerrar los recursos
Sección titulada «Cerrar los recursos»Al finalizar, cerramos primero el ADODB.Recordset y después ADODB.Connection. También liberamos las referencias con Nothing.
registros.CloseSet registros = Nothing
conexion.CloseSet conexion = NothingCerrar los objetos cuanto antes libera conexiones y memoria del servidor.
Ejemplo completo
Sección titulada «Ejemplo completo»El siguiente código reúne todo el proceso:
<%Option Explicit
Dim conexionDim registrosDim rutaBaseDatosDim cadenaConexionDim sql
rutaBaseDatos = Server.MapPath("prueba.mdb")cadenaConexion = "Provider=Microsoft.Jet.OLEDB.4.0;" & _ "Data Source=" & rutaBaseDatos & ";"
Set conexion = Server.CreateObject("ADODB.Connection")conexion.Open cadenaConexion
sql = "SELECT valor FROM Datos"Set registros = conexion.Execute(sql)
Do Until registros.EOF Response.Write(Server.HTMLEncode(CStr(registros("valor")))) Response.Write("<br>")
registros.MoveNextLoop
registros.CloseSet registros = Nothing
conexion.CloseSet conexion = Nothing%>Este patrón permite abrir una conexión desde ASP, ejecutar una consulta SQL, recorrer el ADODB.Recordset de forma segura y liberar correctamente los recursos utilizados.
Descarga el código de Acceder a una base de datos con ASP
Descubre cómo Acceder a una base de datos con ASP usando ADODB, conexión segura y consultas eficientes; guía paso a paso que impulsa tu desarrollo web.