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

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

Geschrieben von: Christian Koller
Kategorie: Datenbank

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:

  • Einfügen eines Datensatzes mit dem INSERT Statement: Dies habe ich bereits in einem früheren Artikel beschrieben.
  • Benutzen der ADO Methoden Update oder UpdateBatch: Dabei wird eine (leeres) ADO Recordset geöffnet, mittels der AddNew Methode ein neuer Datensatz oder mehrere Datensätze angefügt, und das geänderte Recordset dann durch Ausführen der Update (bzw. UpdateBatch) Methode wieder in die Datenbank geschrieben.

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:

  • Ein Keyset Cursor: Dazu wird der CursorType des Recordsets vor Öffnen des Recordsets auf adOpenKeyset gesetzt.
  • Optimistic Locking: Dies ist ein Datenbank-Locking, das ein Benutzen der Update bzw. UpdateBatch Methoden erlaubt, dabei wird die LockType Eigenschaft auf adLockOptimistic (für Update) bzw. auf adLockBatchOptimistic (für UpdateBatch) gesetzt.

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.

Download des Codes

Klicken Sie hier, um den Download zu starten.

Verwandte Artikel

ADO und ASP - Datenbanken einmal näher betrachtet
Aktualisieren von Daten mit dem UPDATE Statement
Datensätze mit dem DELETE Statement löschen
Einfügen eines Datensatzes mit dem INSERT Statement

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.