Modo desconectado ASP clásico (getrows)

Código ASP clásico

El modo desconectado es una forma de trabajar con los datos de una base de datos sin estar conectado a ella en todo momento. En ASP.NET, se proporciona un conjunto de herramientas que permite trabajar en modo desconectado, pero en Classic ASP también podemos trabajar en este modo almacenando los valores de un objeto Recordset en una matriz bidimensional.

Por lo general, abrimos un objeto Recordset y luego utilizamos una instrucción Do While Not objRS.EOF ...Loop para iterar a través de cada fila en el Recordset. Este enfoque es bueno y válido.

Sin embargo, existe un método especial para el objeto Recordset llamado GetRows(), que lee los contenidos del Recordset en una matriz bidimensional. Para mostrar los datos del Recordset, podemos simplemente iterar a través de esta matriz. Después de almacenar los datos en la matriz bidimensional, podemos cerrar el objeto Recordset y la conexión.

Si bien la sintaxis para el enfoque basado en matrices es un poco más confusa que simplemente iterar a través del Recordset con Do While Not objRS.EOF ... Loop, la principal motivación detrás del uso de GetRows() es el rendimiento.

Existen tres cosas importantes que recordar al trabajar con GetRows:

 1. Los arrays de VBScript empiezan en 0 y van hasta n-1, donde n es la cantidad de registros (o cantidad de columnas) en el recordset. Si tienes 30 registros, tendrás filas numeradas del 0 al 29; si tienes 5 columnas, tendrás columnas numeradas del 0 al 4. En otras palabras, como si hubieras hecho Dim rows(4,29) para declarar el tamaño del array tú mismo.
2. Los arrays de VBScript se organizan por MyArray(ElementoDeColumna, NúmeroDeFila) en lugar de MyArray(NúmeroDeFila, ElementoDeColumna).
3. El orden de selección de campos en tu sentencia SQL determina el subíndice de columna utilizado para acceder a ese campo. Si tienes 5 campos, tendrás elementos de columna del 0 al 4.

Imagina que tienes la siguiente sentencia SQL SELECT:

Select fName, lName, Address, City, State, ZipFROM SomeTableORDER BY lName, fName

y que ya has creado y abierto tanto los objetos Connection como Recordset. Para leer el contenido del Recordset en un array, utiliza:

MyArray = rsMyRecordSet.GetRows()

VBScript establece MyArray (NúmeroDeColumnas, NúmeroDeFilas) con NúmeroDeColumnas siendo el número de campos seleccionados - 1 (basado en 0) y NúmeroDeFilas siendo el número de registros devueltos - 1 (basado en 0).

Para acceder a los elementos de un array necesitamos utilizar valores de índice enteros. Para obtener la primera columna de la primera fila, utilizaríamos: MyArray(0,0). Sin embargo, este enfoque es muy difícil de leer. Para hacer tu código más legible (y por lo tanto más mantenible), considera crear constantes cuyos valores representen la posición en el array para la columna y cuyo nombre sea similar al nombre de la columna. Por ejemplo, sería prudente añadir:

Const MyFirstNameOrdinal = 0Const MyLastNameOrdinal = 1Const MyAddressOrdinal = 2Const MyCityOrdinal = 3Const MyZipOrdinal = 4

En este caso, tendrás cinco columnas en la matriz numeradas de 0 a 4.

Si queremos obtener el número total de columnas o filas, tenemos que usar diferentes declaraciones de UBound, como se muestra a continuación:

Ubound(MyArray, 1) 'Devuelve el número de columnasUbound(MyArray, 2) 'Devuelve el número de filas

En nuestro primer ejemplo, mostraré cómo mostrar los datos en un formato predeterminado, como:

lName, fName: dirección: ciudad

El código para hacer esto sería un simple bucle a través de cada una de las filas en la matriz; luego, en el cuerpo del bucle, las declaraciones Response.Write producirían los valores de matriz adecuados:

For lnLoopCounter = 0 To Ubound(MyArray,2)
Response.Write MyArray(MyLastNameOrdinal, lnLoopCounter) _
& ", " _
& MyArray(MyFirstNameOrdinal, lnLoopCounter) _
& " : " _
& MyArray(MyAddressOrdinal, lnLoopCounter) _
& " : " _
& MyArray(MyCityOrdinal, lnLoopCounter) _
& "
" & vbNewLine
Next

Si quisieras mostrar los campos en el orden exacto en que se presentaron en tu cláusula SELECT, podrías agregar un bucle interno para las columnas. Normalmente solo saco manualmente las columnas (como se muestra arriba) por simplicidad, pero cualquiera de los enfoques funcionará:

For lnRowCounter = 0 To Ubound(MyArray,2)
For lnColumnCounter = 0 To Ubound(MyArray,1)
Response.Write MyArray(lnColumnCounter, lnRowCounter)
Next
Next




tags: Modo desconectado ASP clásico, asp clasico getrows, classic asp getrows count, classic asp getrows example

En esta sección encontrarás una mezcla de códigos recopilados de fuentes públicas de Internet y otros creados por ASP TEAM. Compartimos recursos útiles de buena fe para formar una base de conocimiento en el desarrollo de aplicaciones en ASP Clásico.