Glengamoi (Forum) · AspHeute · .NET Heute (RSS-Suche) · AspxFiles (Wiki) · .NET Blogs
ASP German Homepage Homepage
 

Liste

.NET 2.0 (1)
.NET Allgemein (16)
.NET Fu (5)
ADO.NET (11)
Aprilscherz (3)
ASP Grundlagen (44)
ASP Tricks (83)
ASP.NET (44)
ASPIntranet.de (5)
C# (28)
Datenbank (44)
Dokumentation (4)
IIS 6.0 (1)
Komponenten (29)
Optimierung (10)
Server (21)
Sicherheit (34)
Tee Off (6)
VB.NET (6)
WAP (8)
Web Services (11)
XML (9)

RSS 2.0 - Die neuesten fünf Artikel auf AspHeute.com


 

Suchen





 

English Articles
Chinese Articles
Unsere Autoren
 
Link zu AspHeute
Impressum
Werben
Anfragen

Speichern von Recordsets in Application-Variablen (Teil I)

Geschrieben von: Christian Koller
Kategorie: ASP Tricks

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-Variablen werden wie folgt gesetzt und gelesen:

' 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.

Das Grundgerüst der Global.asa ist wie folgt:

<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 Codes

Klicken Sie hier, um den Download zu starten.

Verwandte Artikel

Global.asa: Verwendung, Events und Probleme
Speichern von Recordsets in Application-Variablen (Teil II)

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.

Bewerten Sie diesen Artikel
 Sehr gut   Nicht genügend  
   1  2  3  4  5  
 

  
   Für Ausdruck optimierte Seite

©2000-2006 AspHeute.com
Alle Rechte vorbehalten. Der Inhalt dieser Seiten ist urheberrechtlich geschützt.
Eine Übernahme von Texten (auch nur auszugsweise) oder Graphiken bedarf unserer schriftlichen Zustimmung.