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

Update und UpdateBatch zum Einfügen von Datensätzen in Datenbanken

Geschrieben von: Christian Koller
Kategorie: Datenbank

This printed page brought to you by AlphaSierraPapa

Das Einfügen von Daten in Datenbanktabellen ist eine Basisoperation von Webapplikationen mit Datenbankanbindung. In einem ASP Skript hat man die folgenden Möglichkeiten um einen Datensatz in eine Datenbank zu schreiben:

Um einen einzelnen Datensatz in die Datenbank einzufügen, muß man anders vorgehen als wenn man mehrere Datensätze gleichzeitig in die Datenbank schreiben will.

Das Einfügen eines Datensatzes in die Datenbank wird mittels Aufruf der Update Funktion erreicht. Um mehrere Datensätze gleichzeitig in die Datenbank zu schreiben benutzt man die UpdateBatch Methode.

Um die Update bzw. UpdateBatch Methoden benutzen zu können, muß das Recordset updatefähig sein.

Ein updatefähiges Recordset hat die folgende Konfiguration:

Anmerkung: Datenbank-Locking bedeutet, daß während des Änderns von Datensätzen bzw. während dem Einfügen oder Löschen von Datensätzen in der Datenbank bestimmte Datensätze der Datenbanktabelle für andere Zugriffe gesperrt werden. Dies hat den Zweck, daß zum Beispiel nicht ein und der selbe Datensatz von zwei verschiedenen ASP Seiten gleichzeitig geändert werden kann, was in einem nicht-vorhersagbaren Verhalten der Datenbank und einen nicht definiertem Zustsand der Datenbanktabelle enden würde.

In den folgenden Unterkapiteln wird das Einfügen eines bzw. mehrerer Datensätz in die Northwind Datenbank gezeigt. Die Northwind Datenbank ist eine Beispieldatenbank, die mit Access 2000 und SQL Server 7.0 mitgeliefert wird.

Einfügen eines einzelnen Datensatzes in die Datenbank

Zum Einfügen eines einzelnen Datensatzes stellt man eine Datenbankverbindung zur Datenbank her. Dann bereitet man ein Recordset Objekt vor, sodaß es einen Keyset Cursor und Optimistic Locking (LockType = adLockOptimistic) benutzt.

Nun öffnet man das Recordset und fügt mittels AddNew einen neuen Datensatz hinzu. Neue Daten für diesen Datensatz kann man einfach in die Felder des Records schreiben. Schließlich schreibt man die Änderungen in die Datenbank, dies geschieht durch Aufruf der Update Methode des Recordset Objektes.

Hier ist ein Active Server Pages Beispielskript, das den folgenden Datensatz in die Tabelle namens Customers der Access Northwind Datenbank schreibt:

CustomerID: 'AAAAA'
CompanyName: Name der Firma

Die Northwind Access Datenbank hat den Namen Northwind.mdb und wird normalerweise mit Access 2000 mitinstalliert.

Das folgende Listing ist unter dem Namen Update_Access.asp im Download zu diesem Artikel enthalten.

<%
   Const adOpenKeyset = 1
   Const adLockOptimistic = 3
   Const adLockBatchOptimistic = 4
   Const adUseServer = 2
   Const adUseClient = 3
 
   ' Connection String fuer Access Datenbank  
   strDatebase = "C:\Program Files\Microsoft Office\Office\Samples\Northwind.mdb"       
   strConnectionString="Provider=Microsoft.Jet.OLEDB.4.0;" & _ 
     "Data Source=" & strDatebase
   
   ' Oeffne Datenbankverbindung
   Set conn = Server.CreateObject("ADODB.Connection")
   conn.open strConnectionString
   
   ' Definiere SQL Statement fuer leeres Recordset
   strSQL = "SELECT CustomerID, CompanyName FROM Customers " & _ 
         "WHERE CustomerID=' '"

   Set rs = Server.CreateObject("ADODB.Recordset")
   ' Oeffne Recordset:
   ' CursorType = adOpenKeyset
   ' LockType = adLockOptimistic
   ' Cursorlocation = adUseServer (per default)
   rs.LockType = adLockOptimistic
   rs.CursorType = adOpenKeyset
   rs.open strSQL, conn
   
   ' Neuen Datensatz hinzufuegen:
   rs.AddNew
   rs("CustomerID") = "AAAAA"          
   rs("CompanyName") = "Name der Firma"  
   rs.Update
   
   rs.Close
   conn.close
   
   Set rs = Nothing
   Set conn = Nothing
   
   Response.Write("Datensatz in Datenbank geschrieben!")
%>

Analog funktioniert auch das Einfügen eines Datensatzes in eine SQL Server 7.0 oder SQL Server 2000 Datenbank. Das entsprechende Listing finden Sie unter dem Namen Update_Access.asp im Download.

Sie haben gesehen, wie man einen einzelnen Datensatz mittels AddNew und Update in eine Datenbank schreiben kann. Was aber, wenn man mehrere Datensätze auf einmal in eine Datenbanktabelle zu schreiben hat? Dann benutzt man Addnew und die UpdateBatch Methode (statt der Update Methode), wie in der folgenden Sektion beschrieben.

Einfügen mehrerer Datensätze in die Datenbank

Zum Einfügen mehrerer Datensätze in eine Datenbank sind ähnliche Schritte nötig, wie beim Einfügen eines Datensatzes.

Das Recordset muß allerdings durch Setzen der LockingType Eigenschaft auf adLockBatchOptimistic richtig auf die Verwendung der UpdateBatch Methode vorbereitet werden. Den CursorType kann man wieder auf adOpenKeyset setzen.

Da nicht alle Datenbanken das gleichzeitige Einfügen mehrerer Datensätze verwalten können, muß man oft einen client-side Cursor für das Recordset Objekt benutzen. Dabei werden die Änderungen der Datensätze vom ADO Provider verwaltet, bis sie schließlich mittels Aufruf der UpdateBatch Methode in die Datenbank geschrieben werden.

Für eine Access 2000 Datenbank benötigt man unbedingt einen client-side Cursor, während die SQL Server 7.0/2000 Datenbank das Einfügen mittels UpdateBatch auch bei server-side Cursor (der default Cursor) des Recordsets unterstützt.

Das nachfolgende Skript (mit Namen UpdateBatch_Access.asp) zeigt, wie man zwei neue Datensätze in die Customers Tabelle der Northwind Access Datenbank schreibt.

<%
   Const adOpenKeyset = 1
   Const adLockOptimistic = 3
   Const adLockBatchOptimistic = 4
   Const adUseServer = 2
   Const adUseClient = 3
 
   ' Connection String fuer Access Datenbank  
   strDatebase = "C:\Program Files\Microsoft Office\Office\Samples\Northwind.mdb"       
   strConnectionString="Provider=Microsoft.Jet.OLEDB.4.0;" & _ 
     "Data Source=" & strDatebase
   
   ' Oeffne Datenbankverbindung
   Set conn = Server.CreateObject("ADODB.Connection")
   conn.open strConnectionString
   
   ' Definiere SQL Statement fuer leeres Recordset
   strSQL = "SELECT CustomerID, CompanyName FROM Customers " & _ 
         "WHERE CustomerID=' '"

   Set rs = Server.CreateObject("ADODB.Recordset")
   ' Oeffne Recordset:
   ' CursorType = adOpenKeyset
   ' LockType = adLockBatchOptimistic
   ' Cursorlocation = adUseServer (per default)
   rs.CursorLocation = adUseClient
   rs.LockType = adLockBatchOptimistic
   rs.CursorType = adOpenKeyset
   rs.open strSQL, conn
   
   ' Neue Datensaetze hinzufuegen:
   rs.AddNew
   rs("CustomerID") = "AAAAA"          
   rs("CompanyName") = "Name der Firma"  
   
   rs.AddNew
   rs("CustomerID") = "AAAAB"          
   rs("CompanyName") = "Another Company"  
   
   ' Schreiben der Datensaetze in die Datenbank
   rs.UpdateBatch

   rs.Close
   conn.close
   
   Set rs = Nothing
   Set conn = Nothing
   
   Response.Write("Datensaetze in Datenbank geschrieben!")
%>

Das im Download enthaltene ASP Skript namens UpdateBatch_SQL.asp führt die selben Aktionen wie das vorhergehende Skript durch, wobei es die zwei Datensätze in die SQL Server 7.0/2000 Northwind Datenbank schreibt.

Schlußbemerkung

Das Benutzen der Recordset Methoden AddNew und Update (oder UpdateBatch) ist etwas komplizierter als das Einfügen eines Datensatzes in eine Datenbank mittels SQL INSERT Statement. Dafür muß man sich nicht mehr so genau um die Datentypen der einzelnen Felder kümmern, da man die Feldwerte einfach den Feldern des Recordsets zuweist.

Wichtig ist, daß man schon vor oder während des Öffnens des Recordsets die Recordset Parameter LockType, CursorType und gegebenenfalls CursorLocation auf spezielle Werte setzt, sodaß das erhaltene Recordset updatefähig wird.

This printed page brought to you by AlphaSierraPapa

Download des Codes

Klicken Sie hier, um den Download zu starten.
http://www.aspheute.com/code/20010213.zip

Verwandte Artikel

ADO und ASP - Datenbanken einmal näher betrachtet
http:/www.aspheute.com/artikel/19990825.htm
Aktualisieren von Daten mit dem UPDATE Statement
http:/www.aspheute.com/artikel/20001124.htm
Datensätze mit dem DELETE Statement löschen
http:/www.aspheute.com/artikel/20001127.htm
Einfügen eines Datensatzes mit dem INSERT Statement
http:/www.aspheute.com/artikel/20001107.htm

 

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