Domanda

Ho una query sql che può riportare un gran numero di righe tramite un DataReader. Proprio ora chiedo al DB di trasformare il set di risultati in un Elenco (di) e i dati associano la Griglia all'Elenco.

Ciò può comportare occasionalmente un timeout a causa delle dimensioni del set di dati.

Attualmente ho una configurazione a tre teir in cui l'interfaccia utente agisce sull'elenco di oggetti nel livello aziendale.

Qualcuno può suggerire l'approccio migliore per implementare il caricamento lento in questo scenario? o c'è qualche altro modo per implementarlo in modo pulito?

Attualmente sto usando Visual Studio 2005, .NET 2.0

EDIT: come verrebbe utilizzato il paging in questa istanza?

È stato utile?

Soluzione

LINQ to SQL sembra avere senso nella tua situazione.

Altrimenti, se per qualsiasi motivo, non vuoi usare LINQ to SQL (es. sei su .NET 2.0), prendi in considerazione di scrivere un iteratore che legge il DataReader e lo converte in modo appropriato oggetto:

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

Altri suggerimenti

Devi ripristinare tutti i dati contemporaneamente? Potresti considerare il paging.

Il paging potrebbe essere la soluzione migliore. Se si utilizza SQL Server 2005 o versione successiva, è stata aggiunta una nuova funzionalità. 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;

Esiste un esempio di David Hayden che è molto utile per dimostrare l'SQL.

Questo metodo ridurrebbe il numero di record restituiti, riducendo il tempo di caricamento complessivo. Significa che dovrai fare un po 'di più per tracciare dove ti trovi nella sequenza dei record, ma ne vale la pena.
La tecnica di paging standard richiede che tutto torni dal database e quindi venga filtrato a livello intermedio o client (code-behind) questo metodo riduce i record a un sottoinsieme più gestibile.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top