Lo primero que debéis saber es ¿qué es la tecnología .NET de
Microsoft? (cosa que deberíais hacer leyendo artículos o manuales
al respecto), yo sólo os diré que funciona con la misma filosofía
que Java. Se ha diseñado un entorno o máquina virtual (.NET
Framework) que con una tecnología denominada Common Language
Runtime (CLR) es capaz de ejecutar un código intermedio (MSIL). A
su vez se han rediseñado una serie de lenguajes como Visual Basic
.NET y JScript .NET (también se ha diseñado un nuevo lenguaje
denominado C#), que son compilados a este lenguaje intermedio (o
sea el resultado de la compilación de estos lenguajes no es código
máquina ejecutable sino MSIL, para todos el mismo). Con todo ello
se pretende que trozos de código escritos en diferentes lenguajes
puedan interaccionar y también que el software se pueda portar a
diferentes entornos (simplemente diseñando versiones del .NET
Framework para otras plataformas y sin tener que cambiar ni una
línea de código). A todo ello hay que añadir mejoras en la
orientación a objeto de los lenguajes, la interrelación de los
mismos a través del Visual Studio .NET, las nuevas librerías
comunes (como ADO.NET) y otras nuevas características como el
soporte SOAP/XML de intercambio de información.
Bueno eso sólo era una pequeña introducción (tal vez hasta
improcedente en una revista como ésta en la que podemos leer tanto
sobre .Net, pero me gusta introducir los temas que voy a tratar),
no os asustéis que a partir de ahora el tema va a ser más práctico.
Dejémonos de discursos y pongamos manos a la obra.
Centrémonos en nuestro objetivo: Queremos coger nuestra página ASP
que funciona perfectamente y hacerla funcionar bajo ASP.NET (no me
refiero a traducir el código ASP a código .Net sino a introducir
algunas variaciones que lo hagan compatible con el .Net Framework).
Para conseguirlo tomaremos una página de ejemplo escrita en ASP
clásico e intentaremos ejecutarla directamente como si se tratara
de una ASP.NET. Después iremos modificando el código para evitar
los errores que nos irán apareciendo.
En principio los errores se deberán, en su mayoría, a cambios
sintácticos entre el VBScript (usado en las páginas ASP clásicas) y
el Visual Basic.NET usado en las modernas ASP.NET. Hay que entender
que ASP.NET no es una nueva versión de ASP, sino un cambio de
tecnología por lo que no se mantiene toda la compatibilidad. (En
este punto debo deciros que en un mismo sistema pueden coexistir
páginas ASP clásicas y ASP.NET. Esto se debe a que usan librerias
de ejecución distintas y el Internet Information Server usa la
necesaria en cada caso)
Bueno empecemos echándole un vistazo a la figura 1 que es la
página que usaremos. Vamos a usar una página típica en la que
mostraremos en una lista datos obtenidos de una tabla de base de
datos (concretamente una lista de tecnologías de desarrollo).
Lo primero que nos encontramos en las líneas 1 y 2 es:
<%@ Language="vbscript" %>
<% Option Explicit %>
En estas líneas definimos que vamos a usar el lenguaje VBScript y
que queremos que se nos avise en el caso de que usemos variables
sin declararlas. Seguidamente abrimos la conexión a la base de
datos utilizando ADO (ActiveX Data Objects) y realizamos una
consulta simple rellenando el recordset:
<%
Dim oConn, rs, SQL
set oConn = Server.CreateObject(
"ADODB.Connection")
set rs = Server.CreateObject(
"ADODB.Recordset")
oConn.Open "DRIVER={Microsoft Access
Driver (*.mdb); DBQ= " &
Server.MapPath("bd.mdb")
SQL = "select * from desTemas"
set rs = oConn.Execute(SQL)
%>
Ahora la cabecera del documento HTML, abrimos el cuerpo del
documento y la tabla:
<html>
<head>
<title>Actualizacion de ASP a
ASP PuntoNET</title>
</head>
<body>
<table align="center">
A continuación creamos tantas celdas en la tabla (etiquetas
<tr><td> </td></tr>) como registros haya en
el recordset. Y escribimos dentro de cada celda lo devuelto por el
campo nombre del recordset.
<%
while not rs.EOF
%>
<tr>
<td>
<%response.write rs("nombre")%>
</td>
</tr>
<%
rs.movenext
wend
%>
Después cerramos la tabla, el cuerpo y el documento HTML:
</table>
</body>
</html>
Ya sólo nos queda cerrar la conexión:
<%
rs.close
set rs = nothing
oConn.Close
%>
Ni que decir tiene que este código tal y como está no se ejecuta
correctamente sobre el .NET Framework. Así que ahora que conocemos
el código del que partiremos empecemos con la transformación.
Lo primero que debemos hacer es cambiar la extensión de nuestro
archivo de .ASP a .ASPX (debemos recordar que el Internet
Information Server usará el ASP.DLL para manejar las páginas con
extensión ASP y el ASPNET_WP.EXE para las de extensión ASPX); así
el IIS entenderá que nuestra página debe ser ejecutada a través del
.NET Framework (que lógicamente debe estar instalado en el
servidor). Tras hacerlo mostramos nuestra página en un navegador.
Nos aparece la primera página de error (ver figura 2). Lo primero
que advertimos es la mejora en los mensajes de error en relación a
los que se mostraban en el sistema ASP clásico.
Apreciamos como se nos indica un error en la línea 3 con la
descripción:
"BC30024: La instrucción no es válida dentro de un método."
Este error hace referencia a que en ASP.NET no está permitido el
uso de Option Explicit, para ello se ha creado un atributo de la
directiva page de la página. O sea, debemos quitar el Option
Explicit y colocar:
<%@page explicit="true"%>
Tras volver a mostrar la página en el navegador nos aparece un
nuevo mensaje de error que vemos en la figura 3.
En dicho mensaje se nos advierte de que sólo puede haber una
directiva page. Para poder indicar en una sola directiva page
varias cosas se han creado los atributos. Hemos usado el atributo
Explicit anteriormente y ahora usaremos el atributo language para
indicar que usaremos Visual Basic .NET (aquí cabe recordar que en
ASP.NET ya no se usa VBScript sino alguno de los lenguajes
compatibles con .NET framework como Visual Basic .NET,
JScript .NET, C#, ...). Pondremos:
<%@page language="vb" explicit="true"%>
De nuevo volvemos a intentar ejecutar la página (ver figura
4).
El nuevo mensaje nos indica que en Visual Basic.NET han
desaparecido las sentencias Set y Let por lo que debemos quitarlas.
Las quitaremos en (dejamos las asignaciones igual pero sin
SET):
set oConn = Server.CreateObject(
"ADODB.Connection")
set rs = Server.CreateObject(
"ADODB.Recordset")
y en:
set rs = oConn.Execute(SQL)
y
set rs = nothing
De nuevo recargamos la página en el navegador y de nuevo aparecen
errores (ver la figura 5).
Concretamente nos aparece un error en la linea 11,
indicando:
"BC30800: Los argumentos de método se deben incluir entre
paréntesis"
O sea, en Visual Basic.NET ha habido un cambio (con respecto a
versiones anteriores) y ahora la sintaxis para parámetros de
funciones y procedimientos es la misma; es obligatorio que vayan
entre paréntesis. Por ello debemos cambiar las siguientes
líneas:
oConn.Open "DRIVER={Microsoft Access Driver (*.mdb)}; DBQ= "&
Server.MapPath("..\db\bd.mdb")
por
oConn.Open("DRIVER={Microsoft Access Driver (*.mdb)}; DBQ= "&
Server.MapPath("..\db\bd.mdb"))
y
<%response.write rs("nombre")%>
por
<%response.write(rs("nombre"))%>
Y por fin ya no aparecen más mensajes de error. Pero ... ¿Que es
lo que debería mostrarse en el navegador? ¿Y que es lo que aparece?
Pues aparece una sucesión de System.__ComObject y pensaréis ¿esto
que es? No os preocupéis, en este caso no hay errores sintácticos.
Se trata de un error de conversión de tipos (por eso no hay
mensaje).
El problema radica en la linea 30:
<%response.write(rs("nombre"))%> ¿qué ocurre, no ves ningún
error? En realidad en VBScript no lo hay. El problema está en que
Visual Basic.NET no permite usar propiedades de objeto por defecto.
O sea, el objeto recordset tiene la propiedad por defecto fields (y
ahora hay que escribirla explícitamente) y a su vez fields tiene la
propiedad value (que también debemos indicar). En definitiva la
línea nos queda:
<%response.write(
rs.fields("nombre").value)%>
Tras todo esto y por fin, vemos el resultado deseado (idéntico al
original en ASP clásico pero ahora ejecutado sobre un sistema
mejorado y más eficiente. Ver figura 6).
Bueno espero que este ejemplo de cómo actualizar una página ASP
(vbscript) para que se ejecute correctamente bajo ASP.NET os haya
servido y os permita optimizar vuestras páginas mientras aprendéis
a crear verdaderas páginas ASP.NET.
En la web de la revista y en http://www.indesia.com/Antigoto
podéis encontrar los archivo con los códigos completos usados en el
artículo para que lo podáis descargar. El código de la página
original lo tenéis en el fichero ARTEJEMPLO01.ASP y las sucesivas
actualizaciones en los ficheros ARTEJEMPLO01.ASPX a
ARTEJEMPLO08.ASPX (en cada uno se ha ido subsanando un error) y
también os paso una pequeña base de datos Access (la usada en el
ejemplo) bd.mdb.