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

Black Friday: Vorsicht vor schädlichen QR-Codes

Bösartige QR-Codes, die per E-Mail versendet werden, eignen sich sehr gut, um Spam-Filter zu umgehen.

4 Stunden ago

Black Friday: Zahl der ominösen Shopping-Websites steigt

Unsichere Websites und Phishing-Mails in Verbindung mit Black Friday können kauffreudigen Konsumenten zum Verhängnis werden.

4 Stunden ago

SmokeBuster bekämpft SmokeLoader

Malware SmokeLoader wird weiterhin von Bedrohungsakteuren genutzt, um Payloads über neue C2-Infrastrukturen zu verbreiten.

11 Stunden ago

Taugen Kryptowährungen als Unterstützer der Energiewende?

Bankhaus Metzler und Telekom-Tochter MMS testen, inwieweit Bitcoin-Miner das deutsche Stromnetz stabilisieren könnten.

1 Tag ago

Supercomputer-Ranking: El Capitan überholt Frontier und Aurora

Mit 1,7 Exaflops ist El Capitan nun der dritte Exascale-Supercomputer weltweit. Deutschland stellt erneut den…

1 Tag ago

Ionos führt neue AMD-Prozessoren ein

Der deutsche Hyperscaler erweitert sein Server-Portfolio um vier Angebote mit den neuen AMD EPYC 4004…

1 Tag ago