Update und UpdateBatch zum Einfügen von Datensätzen in Datenbanken
Geschrieben von: Christian Koller 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 DatenbankZum 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:
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 DatenbankZum 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ßbemerkungDas 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 CodesKlicken Sie hier, um den Download zu starten. Verwandte Artikel
ADO und ASP - Datenbanken einmal näher betrachtet 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 |