Speichern von Recordsets in Application-Variablen (Teil I)
Geschrieben von: Christian Koller In einer ASP Anwendung kann es von Vorteil sein,
Datenbankwerte, die nicht (oder nur sehr selten) verändert werden,
in einer Application Variablen zu speichern.
Auf solch' eine Application Variable kann dann
jedes ASP-Skript der selben Website zugreifen
(solang' es besondere Umstände nicht daran hindern). ' Application Variable setzen: Application.Lock Application("VariablenName") = VariablenWert Application.UnLock ' Application Variable auslesen: Variable = Application("VariablenName") Den Wert einer Application-Variable setzt man am besten in der Unterroutine (engl. Sub) Application_OnStart der Global.asa. Die Global.asa ist eine Text Datei (ähnlich einer .asp-Datei), die im Root-Verzeichnis der Website liegt. In der Global.asa stehen die Definitionen der Unterroutinen Application_OnStart und Application_OnEnd, die beim Starten und Beenden der Website-Applikation abgearbeitet werden. Ausserdem kann die Global.asa noch die Unterroutinen Session_OnStart
und Session_OnEnd enthalten, die beim Starten und Beenden einer User-Session
in der Website-Applikation ausgeführt werden. <SCRIPT LANGUAGE="VBScript" RUNAT="SERVER"> Sub Application_OnStart ' Wird beim Starten der Website Applikation ausgeführt ' Hier werden normalerweise Application-Variablen gesetzt Application("Variablenname")= VariablenWert ... End Sub Sub Application_OnEnd ' Wird beim Beenden der Website Applikation ausgeführt ... End Sub Sub Session_OnStart ' Wird beim Starten einer Session ausgeführt ... End Sub Sub Session_OnEnd ' Wird beim Beenden einer Session ausgeführt ... End Sub </SCRIPT> Welche Möglichkeiten hat man, wenn man ein Recordset in einer Application-Variablen speichern will? Man könnte ein Disconnected Recordset nehmen (das keine permanente Datenbank Verbindung braucht) und es in einer Application-Variablen speichern - Dies war unter IIS 4.0 möglich, wird jedoch auf einem IIS 5.0 (Windows 2000) unter Ausgabe einer Fehlermeldung verweigert. Anmerkung: Auch auf einer IIS 4.0 ASP-Applikation war es nicht ratsam ein Recordset Objekt (oder irgendein anderes Objekt) in einer Application-Variablen zu speichern, da jede ASP-Seite, die das Recordset dann benutzte, im selben "Thread"-Kontext wie das Recordset Objekt laufen mußte. Dies hatte vereinfacht gesagt zur Folge, daß der Webserver seine Kapazitäten nicht ausschöpfen konnte, da alle ASP-Skripts nur einzeln nacheinander abgearbeitet werden können. Da das Abarbeiten einer ASP-Seite, durch die Client-Server Architektur des Internetes bedingt, durchaus mehrere Sekunden dauern konnte, war eine beträchtliche Performance Einbuße schon bei mittelgroßen Internet-Applikationen zu beobachten. Eine weitere Möglichkeit den Recordset Inhalt in einer Application-Variablen zu speichern ist, das Recordset in ein Array umzuwandeln, um dann dieses Array in einer Application-Variablen zu speichern. Dies läßt sich einfach mit der GetRows Methode des Recordset Objektes verwirklichen. Dabei werden die Daten in einem zwei-dimensionalen Array mit 0-basierendem Index gespeichert (erste Dimension ist Feld, zweite Dimension die Datensatznummer): <% ... rs.MoveFirst arrRecordset = rs.GetRows() Application.Lock Application("RecordsetArray")= arrRecordset Application.UnLock ' Alle Datensaetze des Arrays durchlaufen For intI = 0 to UBound(arrRecordset, 2) strErstesFeld = arrRecordset(0,intI) strZweitesFeld = arrRecordset(1,intI) ... Next %> Einen anderen Weg beschreitet man, wenn man den Inhalt des Recordsets unter Verwendung der GetString Methode in einer String (Text) Variablen speichert. Diese Text Variable kann dann in einer Application Variablen gespeichert und bei Bedarf wieder ausgelesen werden. Zum Auslesen des Recordset Inhaltes aus der Text-Variablen ist es oft hilfreich, den Text in ein Array überzuführen, und dann die Daten aus dem Array zu lesen: <% ' Recordset in String Speichern ' Als Begrenzungszeichen fuer Records (oder Rows) wird die ' Zeilenschaltung (Konstante VbCrLf in VBScript), ' und zur Begrenzung der Salten (oder Columns) ' das "|"-Zeichen verwendet strRecordsetInhalt = rs.GetString(2, , "|", VbCrLf, "(null)") ' 2 = adClipString ' Speichern des Recordset Inhaltes als String ' in einer Application Variablen Application.Lock Application("RecordsetString")= strRecordsetInhalt Application.UnLock ' Auslesen der Daten aus dem String durch ' Ueberfuehren in ein Array arrRecords = Split(strRecordsetInhalt, VbCrLf) For intI = 0 to UBound(arrRecords) - 1 Response.Write intI+1 & ". Datensatz:<br>" & VbCrLf arrFields = Split(arrRecords(intI), "|") For intK = 0 to UBound(arrFields) Response.Write " " & intK+1 & ". Feld = " Response.Write arrFields(intK) & "<br>" & VbCrLf Next Next %> Weitaus komfortabler als ein Recordset in Form eines Arrays oder Strings mit Begrenzungszeichen zu speichern ist es jedoch, wenn man ein Recordset als XML-String in einer Application Variablen speichert. Dies hat den Vorteil, daß man das XML wieder einfach in ein Recordset Objekt umwandeln kann. Mit diesem Recordset Objekt kann man natürlich alle Recordset Operationen ausführen, den Inhalt lesen, das Recordset sortieren, oder nach bestimmten Werten suchen. Weiters kann man das Recordset ändern, in einen XML-String überführen, und den XML-String wieder in die Application Variable zurückschreiben. Wie dies im Detail funktioniert lesen Sie in Teil II. Download des CodesKlicken Sie hier, um den Download zu starten. Verwandte Artikel
Global.asa: Verwendung, Events und Probleme Wenn Sie jetzt Fragen haben...Wenn Sie Fragen rund um die in diesem Artikel vorgestellte Technologie haben, dann schauen Sie einfach bei uns in den Community Foren der deutschen .NET Community vorbei. Die Teilnehmer helfen Ihnen gerne, wenn Sie sich zur im Artikel vorgestellten Technologie weiterbilden möchten. Haben Sie Fragen die sich direkt auf den Inhalt des Artikels beziehen, dann schreiben Sie dem Autor! Unsere Autoren freuen sich über Feedback zu ihren Artikeln. Ein einfacher Klick auf die Autor kontaktieren Schaltfläche (weiter unten) und schon haben Sie ein für diesen Artikel personalisiertes Anfrageformular.
Und zu guter Letzt möchten wir Sie bitten, den Artikel zu bewerten. Damit helfen Sie uns, die Qualität der Artikel zu verbessern - und anderen Lesern bei der Auswahl der Artikel, die sie lesen sollten.
©2000-2006 AspHeute.com |