Benutzerspezifisches Paging mit SQL Server 2005 implementieren

In den vorausgegangenen Artikeln wurden die Grundlagen der Verwendung des ListView-Steuerelements besprochen und erklärt, wie es sich mit dem DataPager-Steuerelement verbinden lässt. In diesem Betrag geht es nun darum, wie man diese Steuerelemente mit einem SQL-Server-2005-Backend verwendet, um eine benutzerspezifische, seitenweise Anzeige von Daten (Paging) zu implementieren, bei der nur eine Teilmenge der Daten abgerufen wird.

Wann werden Daten geladen?

Standardmäßig rufen .NET-Datenkomponenten wie ListView und GridView sämtliche Ergebnisse einer Anfrage ab, wenn Daten zur Anzeige auf einer Seite geladen werden. Besser ist es jedoch, nur die Daten zu laden, die auf der Seite tatsächlich angezeigt werden. Wenn der Benutzer dann zu einer anderen Seite navigiert, wird sie von der Backend-Datenquelle geladen und dargestellt.

Dadurch ist mehr Kommunikation zwischen der Applikation und der Datenbank erforderlich. Aber das ist ein geringer Preis dafür, dass die ressourcenintensive Arbeit, ein komplettes Datenset für jede Seite zu laden, vermieden wird.

Hinweis: Dieses Verfahren ist nur bei größeren Datenmengen effizienter.

Datenteilmengen mittels SQL Server 2005 erzeugen

SQL Server 2005 vereinfacht das Abrufen von Teilmengen einer Datenquelle mit Hilfe der Funktion T-SQL-row_number. Diese Funktion ermöglicht es, eine Teilmenge von Anfrageergebnissen auszugeben. Ein Partitionieren und Sortieren nach Klauseln der row_number-Funktion stellt alles bereit, was man dafür braucht. Die Partitionierung wird über die Over-Klausel erzielt. Sie legt eine Partitionierung und Sortierung des Zwischenergebnis-Sets fest, bevor die row_number-Funktion angewendet wird.

Das Ergebnis der Anwendung der row_number-Funktion wird in eine Unterabfrage eingeschlossen, die eine temporär benannte Ergebnismenge ausgibt. Die benötigten Daten werden dann dieser temporären Ergebnismenge entnommen. Zur Veranschaulichung wird hier eine einfache Datenbank mit dem Namen „Test“ verwendet. Sie enthält eine Tabelle namens „People“, die mit folgendem T-SQL erzeugt wurde:

Der nächste T-SQL-Ausschnitt gibt durch Verwendung der row_number-Funktion eine Gruppe von fünf Datensätzen aus der People-Tabelle aus. Die temporäre Tabelle wird innerhalb der Unterabfrage mit dem Namen „PeopleRecords“ versehen. Die row_number-Funktion nummeriert die Zeilen in der Unterabfrage gemäß der ORDER-BY-Klausel. Die äußere oder Hauptabfrage wählt die benötigten Datensätze mittels einer WHERE-Klausel aus, die auf die Unterabfrage angewendet wird.

Die Ausgabe liefert fünf Datensätze, weil die Anfangsnummer (3) und die Endnummer (7) der Datensätze im Ergebnis-Set enthalten sind. Die Zeilen werden nach ihrer Stelle in der ORDER-BY-Klausel der Unterabfrage nummeriert, die die Datensätze nach dem Nachnamen sortiert. Eine ASP.NET-Applikation kann diese Funktion von SQL Server 2005 verwenden, um große Datenmengen effizient durchzublättern.

Page: 1 2 3 4

ZDNet.de Redaktion

Recent Posts

Google schließt kritische Sicherheitslücke in Android 14

Weitere schwerwiegende Fehler stecken in Android 12 und 13. Insgesamt bringt der Mai-Patchday 29 Fixes.

8 Stunden ago

IT Sicherheit: digitale Angriffe sicher abwehren

IT-Sicherheit - Erkennen und Abwehren von digitalen Angriffen

12 Stunden ago

Bestverkaufte Smartphones: Apple und Samsung dominieren

Das iPhone 15 Pro Max ist das meistverkaufte Smartphone im ersten Quartal. Das Galaxy S24…

16 Stunden ago

Google: Passkeys schützen mehr als 400 Millionen Google-Konten

Die Passwort-Alternative Passkeys überholt Einmalpasswörter bei der Zwei-Faktor-Authentifizierung. Auch Microsoft setzt sich aktiv für die…

1 Tag ago

Infostealer: 53 Prozent der Angriffe treffen Unternehmensrechner

Der Anteil steigt seit 2020 um 34 Prozentpunkte. Allein 2023 erfasst Kaspersky rund 10 Millionen…

1 Tag ago

Salesforce: Mit Einstein GPT zurück auf die Überholspur?

Salesforce forciert den Ausbau seiner Industry Clouds. Mit ihrem Prozesswissen könnten deutsche IT-Dienstleister davon profitieren.

2 Tagen ago