Kategorie: Datenbankzugriffe
Frage: Wie kann ich Objektvariablen in Session/Application-Variablen speichern?
Hierzu eine Warnung vorweg. Sie sollten nur im äussersten Notfall Objekte in Session-
und/oder Application-Variablen speichern, da dies sehr viele Nachteile und wenig Vorteile mit sich
bringt.

Im allgemeinen versuchen die Programmierer, sich mit solchen Methoden Arbeit zu ersparen,
da man ansonsten in jeder ASP-Seite Code zum Öffnen und Schliessen einer Datenbank schreiben
muss oder es wird befürchtet, dass die Performance leidet, wenn man die Connections in jeder
ASP-Seite neu aufbauen muss.

Merke: Man spart sich weder Zeit durch das Halten von Objekten in einer Session- und/oder
Applicationvariablen, noch verbessert sich die Performance durch diese "Tricks".

Nachfolgend ein Beispiel, dass auf der ersten ASP-Seite eine Connection erzeugt und diese dann
in einer Session-Variablen speichert. Auf der zweiten Seite wird dann diese Session-Connection
benutzt, um auf die Datenbank zuzugreifen.

[sessiondb.asp]
<%
' --- Instantiieren und öffnen der Datenbankverbindung
Set objConn = Server.CreateObject("ADODB.Connection")
    objConn.Open "<DSN>", "<UID>", "<PWD>"

' --- Speichern des Objekts objConn in einer Session-Variablen
' --- Dieser Schritt ist in 99% aller Fälle unnötig und sollte daher
' --- eigentlich gar nicht erst benutzt werden.
    Set Session("objConn") = objConn

     ' --- Hier erfolgt die weitere Verarbeitung
    ...

    objConn.Close
Set objConn = Nothing
%>

[sessiondb1.asp]
<%

' --- Instantiieren und öffnen der Datenbankverbindung
' --- Die Connection wurde hier in einer Session-Variablen
' --- gehalten und steht daher direkt zur Verfügung.
Set objConn = Session("objConn")

     ' --- Hier erfolgt die weitere Verarbeitung
    ...

Set objConn = Nothing
%>



Eine viel bessere Methode ist die Verwendung sogenannter Include-Dateien. Diese beinhalten die
Funktionen, die zum Öffnen und Schliessen der Datenbankverbindungen benötigt werden. Diese
Include-Datei wird dann nur noch in die entsprechenden ASP-Seiten eingebunden.

[db_open.inc]
<%
' --- Deklarieren der Variablen ausserhalb der Funktion, um
' --- sie global verfügbar zu machen.
Dim objConn

' ----------------------------------------------------------------------
Private Sub OpenDatabase()

Set objConn = Server.CreateObject("ADODB.Connection")
    objConn.Open "<DSN>", "<UID>", "<PWD>"

End Sub
' ----------------------------------------------------------------------
Private Sub CloseDatabase()

    objConn.Close
Set objConn = Nothing

End Sub
' ----------------------------------------------------------------------
%>

[index.asp]
<!--#include file="db_open.inc" //-->
<%
' --- Aufrufen der Funktion OpenDatabase zum Öffnen der Datenbankverbindung
    Call OpenDatabase()

' --- weitere Verarbeitung
    ...

' --- Aufrufen der Funktion CloseDatabase zum Schliessen der Datenbankverbindung
    Call CloseDatabase()
%>

Hiermit haben Sie sich erstens eine Menge Schreibarbeit erspart, da Sie nur noch 2
Funktionsaufrufe zum Öffnen und Schliessen der Datenbankverbindung machen müssen
und zweitens müssen Sie den Code nur noch an einer Stelle ändern, wenn sich irgendein
Parameter ändert (DSN, Passwort, ...) oder Sie z.B. bei einer Datei-DSN den Speicherpfad
der Datenbank ändern.
Copyright 2000 - 2024 by Stefan Falz Webconsulting