DevTrain Startseite Advanced Developers Conference vom 14.-15. Februar 2011  
  
  
SUCHEN:  
ARTIKEL ONLINE: 525   

Kategorien
.NET
Datenbanken
Web
XML

Allgemein
Camp
Foren
Events
Persönliche Einstellungen
Registrieren
Prämien Shop
Kontakt
Impressum
Über DevTrain

Autoren


   Autor: Bernhard Elbl Artikel Drucken
        
Ein Vorteil des Command-Objektes von ADO

Mit Hilfe des Command-Objektes von ADO kann ich einer Tabelle einen Datensatz genauso zufügen, wie mit Recordset-Objekt. Das Command-Objekt bietet jedoch den Vorteil, die Datenbank auf eine Abfrage vorzubereiten(zu kompilieren) und diese Abfrage dann mit anderen Werten wiederholt auszuführen.
Außerdem habe ich die Möglichkeit ein SQL-Statement unvollständig zu erstellen und das Statement kurz vor dem Ausführen zu vervollständigen (wie im Beispiel). Das bringt den Vorteil, daß ein durch Strings und Variablen erstelltes SQL-Statement einem zufälligen Fehler vorbeugt.

Hier ein Fall in dem es zu so einem Fehler kommen kann:
folgendes Statement läuft über mit dem Recordset- und dem Command-Objekt
strSQL = "INSERT INTO kunden(name,vorname) VALUES ('elbl', 'bernhard')"
dieses Statement verursacht im Recordset-Objekt einen Fehler
strSQL = "INSERT INTO kunden(name,vorname) VALUES ('O'Niel', 'James')"
da sich im Namen ein Apostrophe (') befindet. Für das Command-Objekt ist das kein Problem.
Warum? ist im Beispiel zu sehen!

<%
' ---------- Der Connectionstring
 strConn = "Provider=SQLOLEDB.1;Persist Security Info=False;User ID=admin;"
 strConn = strConn & "Initial Catalog=Northwind;Data Source=W2KServer;"
' ---------- Instanziieren und öffnen des Connection-Objektes
set conn = Server.CreateObject("ADODB.Connection")
 conn.Open strConn
' ---------- Instanziieren des Command-Objektes
set cm = Server.CreateObject("ADODB.Command")
' ---------- Zu weisen der geöffneten Connection
 cm.ActiveConnection = conn
' ---------- CommandText(SQL-String) zuweisen
 cm.CommandText = "INSERT INTO be_command(b_text,b_zahl,b_name) VALUES(?,?,?);"
' ---------- Erstellen einer kompilierten Version der Abfrage***
 cm.Prepared = true
' ---------- Parameter anfügen(FeldName,Typ,,Größe)
 cm.Parameters.Append cm.CreateParameter("b_text",adBSTR,,255)
 cm.Parameters.Append cm.CreateParameter("b_zahl",adInteger,,50)
 cm.Parameters.Append cm.CreateParameter("b_name",adBSTR,adParamInput,256)

' ---------- Tabellen-Felder Werte übergeben
 cm("b_text") = "Brenner"
 cm("b_zahl") = 2
 cm("b_name") = "LiteOn"
' ---------- Ausführen bzw Speichern der Werte
 cm.Execute
' ---------- Jetzt kann ich den Vorgang wiederholen
 cm("b_text") = "Monitor"
 cm("b_zahl") = 5
 cm("b_name") = "Eizo"
' ---------- Ausführen bzw Speichern der Werte
 cm.Execute
' ---------- Connection schließen und zerstören
 conn.Close
set conn = nothing
%>


*** in dem ich die Eigenschaft "Prepared" des Command-Objektes auf true setze, sage ich der Datenbank, dass die Version des Statements kompiliert werden soll. Bei wiederholten ausführen ab einem 2.-en Execute spreche ich dann die kompilierte Version an. So erreiche ab dem 2.mal eine bessere Performance. Bei dem ersten Execute wird die Abfrage kompiliert. Dies braucht Zeit, die Abfrage ist beim 1.-en Execute mit Prepared also langsamer!


DevTrain Camp - Schneller zum .NET 3.5 Developer
 
Verwandte Artikel      Verlinkte Dokumente
    Keine Links vorhanden

  Erfasst am: 04.04.2001
  Gültig bis: 04.05.2001
0 Ratings
Bewertung: 0,0%
schlecht    sehr gut  

 
© Copyright 2007 ppedv AG