Pregunta

Tengo una consulta de SQL que puede devolver una gran cantidad de filas a través de un DataReader. En este momento, solicito que la base de datos transforme el conjunto de resultados en una lista (de) y los datos vinculen la cuadrícula con la lista.

Esto puede ocasionar ocasionalmente un tiempo de espera debido al tamaño del conjunto de datos.

Actualmente tengo una configuración de tres horas en la que la interfaz de usuario está actuando en la Lista de objetos en la capa empresarial.

¿Puede alguien sugerir el mejor enfoque para implementar la carga diferida en este scenatrio? ¿O hay alguna otra forma de implementar esto limpiamente?

Actualmente estoy usando Visual Studio 2005, .NET 2.0

EDITAR: ¿Cómo se usaría la paginación en esta instancia?

¿Fue útil?

Solución

LINQ to SQL parece tener sentido en su situación.

De lo contrario, si por alguna razón, no desea usar LINQ to SQL (por ejemplo, está en .NET 2.0), considere escribir un iterador que lea el DataReader y lo convierta al apropiado objeto:

IEnumerator<MyObject> ReadDataReader() {
  while(reader.MoveNext())
    yield return FetchObject(reader);
}

Otros consejos

¿Necesita recuperar todos los datos a la vez? Podrías considerar la paginación.

La paginación podría ser tu mejor solución. Si está utilizando SQL Server 2005 o superior, se agregó una nueva característica. ROWNUMBER () :

WITH MyThings AS
(
    SELECT ThingID, DateEntered,
    ROW_NUMBER() OVER (ORDER BY DateEntered) AS 'RowNumber'
    FROM dbo.Things 
) 
SELECT * 
FROM ThingDetails
WHERE RowNumber BETWEEN 50 AND 60;

Hay un ejemplo por David Hayden, que es muy útil para demostrar el SQL.

Este método disminuiría el número de registros devueltos, reduciendo el tiempo total de carga. Significa que tendrá que hacer un poco más para rastrear dónde se encuentra en la secuencia de registros, pero vale la pena el esfuerzo.
La técnica de paginación estándar requiere que todo vuelva de la base de datos y luego se filtre en el nivel medio o nivel de cliente (código subyacente) este método reduce los registros a un subconjunto más manejable.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top