Frage

ich habe eine SQL-Abfrage, die eine große Anzahl von Zeilen über einen Datareader zurückbringen kann. Gerade jetzt abfragen ich die DB die Ergebnismenge in eine Liste (von) und Daten binden das Gitter in die Liste transformieren.

Dies ist auf die Größe des Dataset aufgrund gelegentlich in einem Timeout führen.

Im Moment habe ich ein drei teir Setup, wo sie durch die UI ist auf der Liste der Objekte in der Business-Schicht wirkt.

Kann jemand empfehlen, den besten Ansatz verzögertes Laden in diesem scenatrio zu implementieren? oder gibt es eine andere Art und Weise diese sauber zu implementieren?

Ich bin derzeit mit Visual Studio 2005, .NET 2.0

EDIT: Wie würde Paging in diesem Fall verwendet werden?

War es hilfreich?

Lösung

LINQ to SQL scheint Sinn in Ihrer Situation zu machen.

Andernfalls, wenn aus irgendeinem Grund Sie nicht wollen, LINQ to SQL verwenden (zum Beispiel sind Sie auf .NET 2.0), sollten Sie einen Iterator zu schreiben, die die DataReader liest und wandelt sie in das entsprechende Objekt:

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

Andere Tipps

Sie benötigen die Daten auf einmal zu holen? Sie könnten unter Berücksichtigung Paging.

Paging könnte Ihre beste Lösung sein. Wenn Sie SQL Server 2005 verwenden oder größer war neues Feature hinzugefügt. 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;

Es gibt ein Beispiel durch David Hayden, die den Nachweis der SQL sehr hilfreich ist.

Dieses Verfahren würde die Anzahl der Datensätze verringern zurück, die Gesamtladezeit reduziert wird. Es bedeutet, dass Sie ein bisschen mehr zu tun haben zu verfolgen, wo Sie in der Folge von Datensätzen sind, aber es ist die Mühe wert.
Die Standard-Paging-Technik erfordert alles aus der Datenbank wieder zu kommen und dann auf der mittleren Ebene gefiltert werden, oder Clientebene (Code-Behind) Dieses Verfahren reduziert die Datensätze auf eine überschaubare Teilmenge.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top