Recordset - Performance von DB Abfrage und Code
Tobi
- vb-script
0 Frank aus Ulm0 Tobi
Hallo zusammen,
Frage 1:
ich wuerde gerne wissen, welchen Code ihr vorziehen wuerdet und was performanter ist:
sub open_db()
Dim path_db, provider_db
path_db = Server.MapPath("") & "\db.mdb"
provider_db = "Microsoft.Jet.OLEDB.4.0"
set con = Server.CreateObject("ADODB.Connection")
con.Open "PROVIDER=" & provider_db & ";DATA SOURCE=" & path_db
end sub
call open_db()
Dim rs
************* bis hier gleich*************
Moeglichkeit 1:
Set rs = Server.CreateObject("ADODB.Recordset")
' add parameter to recordset object
rs.CursorLocation = adUseClient
rs.CursorType = adOpenStatic
rs.LockType = adLockReadOnly
rs.Open sql, con
Moeglichkeit 2:
set rs = con.Execute(sql)
***************ende************************
Liefert beides das selbe.....oder?
Frage 2:
Ich habe das mit den Eigenschaften vom recordset noch net kapiert...was bringt z.B.
rs.Open sql, con, adInteger, adParamInput ?
Lege ich damit vorher schon fest, was fuer ein Format die Werte haben und wirkt sich das dann positv auf das Performance der Datenbank aus? Ist das das gleich, wie wenn ich rs.Fields.append festlege? Welche Eigenschaften wuerdet ihr fuer ein Recordset empfehlen, dass a) nur gelesen werden soll b) auch fuer UPDATE genutzt werden soll?
Waere nett,wenn jemand mir da helfen koennte...
Danke & Gruss
Tobi
Hi, hallo
armer Kerl, antwortet dir mal wieder keiner .. :-)
es gibt definitiv Performance Unterschiede zwischen diesen "Methoden" und deren Params
set rs = conn.execute(sql) gibt automatisch ein Recordsetobjekt zurück: ForwardOnly und ReadOnly was sich positiv auswirkt, wenn du einfach hintereinander Daten in HTML ausgeben wirst.
den selben effekt erzielst du aber auch mit rs.open sql,conn,openMode,Lockmode
wenn du statt forwardOnly OpenStatic verwendest kannst du das Recordset auch vorwärts und Rückwärts durchsuchen.
beides sind fixe snapshots von den Daten zu einem Zeitpunkt X
woher kommt das:
rs.Open sql, con, adInteger, adParamInput ?
rs.open erwartet command,verbindung,openMode,Lockmode als "Parameter", aber wenn du mit parameterisierten Abfragen arbeiten willst, dann mußt du über die Parameter-Collection des Commands gehen.
Tschau, tschüß,
Frank
Hi,
armer Kerl, antwortet dir mal wieder keiner .. :-)
...die Einsamkeit der ASP Entwickler... ;-)...bzw. haben ja alle keine Ahnung, alles Trolls...;-)))...
es gibt definitiv Performance Unterschiede zwischen diesen "Methoden" und deren Params
set rs = conn.execute(sql) gibt automatisch ein Recordsetobjekt zurück: ForwardOnly und ReadOnly was sich positiv auswirkt, wenn du einfach hintereinander Daten in HTML ausgeben wirst.
den selben effekt erzielst du aber auch mit rs.open sql,conn,openMode,Lockmode
D.h. fuer einfache Ausgabe waere die erste Methode mit execute aufgrund weniger Zeilen Code ausreichend (weil by default ForwardOnly und ReadOnly )? Was ist mit der Definition des rs als ADODB.Recordset?
wenn du statt forwardOnly OpenStatic verwendest kannst du das Recordset auch vorwärts und Rückwärts durchsuchen.
Jep, das war mir schon klar.
beides sind fixe snapshots von den Daten zu einem Zeitpunkt X
Jep,d as auch...
woher kommt das:
rs.Open sql, con, adInteger, adParamInput ?
rs.open erwartet command,verbindung,openMode,Lockmode als "Parameter",
Ja, Parameter sind mir eigentlich klar, aber adInteger, adParamInput war mir unklar. Ist also nur bei paramet. Abfragen wichtig?
Danke & Gruss
Tobi