mmmm ..... intentas cargarlos por tramos ...... creo entender que lo que quieres es que en lugar de leer los 20000 registros en una sola llamada al servidor, hacer X llamadas en 20000/X veces ¿es así?, si esto es cierto creo que es la primera vez que veo que alguien pretenda darle solución a la consecuencia (el error de timeout) en lugar de al problema (mostrarle tantos registros al usuario); debes valorar en lo inútil que es para el usuario el tener una grilla con 20,000 registros, al usuario se le entregan solo aquellos que va a consultar o a actualizar, para ello se le colocan filtros y/o totalizados para que solo vea aquello que le es de utilidad, pero en fin.
para hacerlo eso yo lo haría de esta forma:
Código:
<%
Dim sSourceXLS
sSourceXLS = Server.MapPath(".") & "..\Excel\RollosCosteados.xls"
Dim oConn
Set oConn = Server.CreateObject("ADODB.Connection")
oConn.Open "Provider=Microsoft.Jet.OLEDB.4.0;" & _
"Data Source=" & sSourceXLS & ";" & _
"Extended Properties=""Excel 8.0;HDR=YES;"""
TotBloque = 1000
RegBloque = 100
Inicio = 1
Dim oRS
Set oRS = Server.CreateObject("ADODB.Recordset")
%>
<table width="100%" border="1">
<%
For j=1 to TotBloque / RegBloque
Fin = RegBloque * j
oRS.Open "Select * from [Rollos$A" & Inicio & ":Y" & Fin & "]", oConn, 1, 3
Do While Not (oRS.EOF)
%><tr><%
For i = 0 To 24
%><td><%=oRS.Fields(i).Value%><%
Next
oRS.MoveNext
Loop
oRS.Close
Inicio = i * RegBloque + 1
Next
%>
</table>
<%
Set oRS = Nothing
oConn.Close
Set oConn = Nothing
%>
Eso lo hice a la primera y funciona, claro, pero el tiempo de respuesta es sin duda perceptiblemente mayor que si la lectura hubiera sido en una sola pasada.