Analyse der Getrows- und Getstring-Nutzung von Record-Set-Objekten in ASP. Freunde, die dies benötigen, können auf die GetRows-Methode zurückgreifen.
Kopiert mehrere Datensätze eines Recordset-Objekts in ein Array.
Grammatik
Kopieren Sie den Codecode wie folgt:
array = Recordset.GetRows(Zeilen, Start, Felder)
Rückgabewert
Gibt ein zweidimensionales Array zurück.
Parameter
Zeilen Optionaler langer Ausdruck, der die Anzahl der abzurufenden Datensätze angibt. Der Standardwert ist adGetRowsRest (-1).
Start Optional, string oder long, berechnet das Lesezeichen des Datensatzes zu Beginn des GetRows-Vorgangs. Die folgenden BookmarkEnum-Werte können ebenfalls verwendet werden.
Ständige Beschreibung
AdBookmarkCurrent beginnt mit dem aktuellen Datensatz.
AdBookmarkFirst beginnt mit dem ersten Datensatz.
AdBookmarkLast beginnt mit dem letzten Datensatz.
Felder sind optional, Variantentyp und stellen einen einzelnen Feldnamen, eine fortlaufende Position, ein Array von Feldnamen oder eine fortlaufende Positionsnummer dar. ADO gibt nur Daten aus diesen Feldern zurück.
veranschaulichen
Verwenden Sie die GetRows-Methode, um Datensätze aus einem Recordset in ein zweidimensionales Array zu kopieren. Der erste Index identifiziert das Feld und der zweite die Datensatznummer. Die Array-Variable wird automatisch auf die richtige Größe angepasst, wenn die GetRows-Methode Daten zurückgibt.
Wenn Sie keinen Wert für den Rows-Parameter angeben, ruft die GetRows-Methode automatisch alle Datensätze im Recordset-Objekt ab. Wenn mehr Datensätze angefordert werden als verfügbar sind, gibt GetRows nur die Anzahl der verfügbaren Datensätze zurück.
Wenn das Recordset-Objekt Lesezeichen unterstützt, können Sie den Datensatz angeben, bei dem die GetRows-Methode mit dem Abrufen von Daten beginnt, indem Sie den Wert der Bookmark-Eigenschaft des Datensatzes übergeben.
Um die vom GetRows-Aufruf zurückgegebenen Felder einzuschränken, können Sie im Fields-Parameter einen einzelnen Feldnamen/eine einzelne Feldnummer oder ein Array von Feldnamen/-nummern übergeben.
Nach dem Aufruf von GetRows wird der nächste ungelesene Datensatz zum aktuellen Datensatz. Wenn keine weiteren Datensätze vorhanden sind, wird die EOF-Eigenschaft auf True gesetzt.
GetString-Methode
Wenn wir die Datenbank abfragen, um Tabellen anzuzeigen, verwenden wir häufig die Do While()...Loop- oder For...Next-Schleife, um Tabellen anzuzeigen. Wenn wir also eine große Datenmenge abfragen möchten, ist sie zwangsläufig langsamer. Zu diesem Zeitpunkt können wir die vom Recordset-Objekt bereitgestellte GetString()-Methode verwenden (ADO muss auf 2.0 aktualisiert werden).
Grammatik
Kopieren Sie den Codecode wie folgt:
Str=objRecordset.GetString(format,n,coldel,rowdel,nullexpr)
Parameterbeschreibung:
objRecordset: das geöffnete Recordset-Objekt;
Format: optional, nimmt im Allgemeinen den Standardwert an (Standardwert ist 2)
n: Optional, die Anzahl der anzuzeigenden Datensätze. Der Standardwert ist die Anzeige aller Datensätze
coldel: optional, Spaltentrennzeichen
rowdel: optional, Zeilentrennzeichen
nullexpr: optional, dieser Parameter wird zum Füllen leerer Felder verwendet!
Mit der GetString-Methode können wir nur ein Response.Write verwenden, um alle Ausgaben anzuzeigen. Es ist wie eine DO... LOOP-Schleife, die bestimmen kann, ob das Recordset EOF ist.
Mit dieser Methode können Sie Zeichenfolgen automatisch in einer Schleife ausgeben, ohne while- oder for-Schleifen durchlaufen zu müssen, solange das RS-Objekt erstellt und die entsprechenden Operationen ausgeführt werden, unabhängig davon, ob es einen oder mehrere Datensätze zurückgibt oder sogar leer ist Records, getstring Funktioniert wie gewohnt.
Um eine HTML-Tabelle aus den Ergebnissen eines Recordsets zu generieren, müssen wir uns nur um drei der fünf Parameter von GetString kümmern: coldel (der HTML-Code, der die Spalten des Recordsets trennt), rowdel (der HTML-Code, der die Zeilen trennt). das Recordset) und nullexpr (HTML-Code, der generiert werden soll, wenn der aktuelle Datensatz leer ist).
Kopieren Sie den Codecode wie folgt:
<TABLE Border=1>
<TR><TD>
<% = Response.Write rs.GetString( , , </TD><TD>, </TD></TR><TR>, ) %>
</TABLE>
Das so geschriebene HTML-Ergebnis lautet wie folgt:
Kopieren Sie den Codecode wie folgt:
<TABLE Border=1>
<TR>
<TD>Zeile1, Feld1-Wert</TD>
<TD>Zeile1, Feld2-Wert</TD>
</TR>
<TR>
<TD>Zeile2, Feld1-Wert</TD>
<TD>Zeile2, Feld2-Wert</TD>
</TR>
</TABLE>
Hier liegt ein Fehler vor. Schauen wir uns die Generierung des Dropdown-Menüs an:
Kopieren Sie den Codecode wie folgt:
<%
Setze RS = conn.Execute (Wähle den Wert und den Text aus der Auswahloptionstabelle oder den Text aus.)
optSuffix = </OPTION> & vbNewLine
valPrefix = <OPTION Value='
valSuffix = '>
opts = RS.GetString( , , valSuffix, optSuffix & valPrefix, --error-- )
„Die nächste Zeile ist der Schlüssel dazu!“
opts = Left( opts, Len(opts)-Len(valPrefix) )
Response.Write <Select ...> & vbNewLine
Response.Write valPrefix & opts
Response.Write </Select>
%>
Wenn Sie eine korrekte Tabelle erstellen und den Fehler beheben möchten, gehen Sie einfach wie folgt vor:
Kopieren Sie den Codecode wie folgt:
<%
Setze RS = conn.Execute(Select * FROM table)
tdSuffix = </TD> & vbNewLine & <TD>
trPrefix = <TR> & vbNewLine & <TD>
trSuffix = </TD> & vbNewLine & </TR> & vbNewLine & <TR> & vbNewLine
opts = RS.GetString( , , tdSuffix, trSuffix & trPrefix, --error-- )
„Die nächste Zeile ist der Schlüssel dazu!“
opts = Left( opts, Len(opts)-Len(trPrefix) )
Response.Write <TABLE Border=1 CellPadding=5> & vbNewLine
Response.Write trPrefix & opts
Response.Write </TABLE> & vbNewLine
%>
Lassen Sie uns einen völlig anderen Ansatz vorstellen:
Kopieren Sie den Codecode wie folgt:
<%
SQL = Wählen Sie '<OPTION Value=''',value,'''>',text,'</OPTION>' FROM table orDER BY text
Setze RS = conn.Execute(SQL)
Response.Write <Select> & vbNewLine & RS.GetString(,,,vbNewLine) & </Select>
%>
Haben Sie es jemals benutzt? . .
Hast du das gesehen? Ergebnisse können direkt aus der Abfrage zurückgegeben werden.
Gehen Sie noch einen Schritt weiter und können Sie Folgendes tun:
Kopieren Sie den Codecode wie folgt:
<%
SQL = Wählen Sie '<OPTION Value=''' & value & '''>' & text & '</OPTION>' FROM table orDER BY text
Setze RS = conn.Execute(SQL)
Response.Write <Select> & vbNewLine & RS.GetString(,,,vbNewLine) & </Select>
%>
Hier ist ein vollständiges Beispiel:
Skriptausgabe:
711855 Mittwoch, 23. 23.03.2005 01:33:37 Uhr
711856 Mittwoch, 23. 23.03.2005, 01:23:00 Uhr
711857 Mittwoch, 23. 23.03.2005, 01:26:34 Uhr
711858 Mittwoch, 23. 23.03.2005 01:33:53 Uhr
711859 Mittwoch, 23. 23.03.2005 01:30:36 Uhr
Der vollständige ASP-Code lautet wie folgt:
Kopieren Sie den Codecode wie folgt:
<%
' Ausgewählte Konstanten von adovbs.inc:
Const adClipString = 2
' Deklarieren Sie unsere Variablen ... immer eine gute Übung!
Dimmen Sie cnnGetString ' ADO-Verbindung
Dim rstGetString ' ADO-Recordset
Dim strDBPath ' Pfad zu unserer Access DB (*.mdb)-Datei
Dim strDBData ' String, in den wir alle Daten speichern
Dim strDBDataTable ' String, in den wir alle Daten speichern
' Nur dieses Mal bauen wir einen Tisch
' MapPath zum physischen Pfad unserer MDB-Datei.
strDBPath = Server.MapPath(db_scratch.mdb)
'Erstellen Sie eine Verbindung mit OLE DB
Setze cnnGetString = Server.CreateObject(ADODB.Connection)
' Diese Zeile ist für die Access-Beispieldatenbank:
'cnnGetString.Open Provider=Microsoft.Jet.OLEDB.4.0;Data Source= & strDBPath & ;
' Da wir tatsächlich SQL Server verwenden, verwenden wir stattdessen diese Zeile.
' Kommentieren Sie diese Zeile aus und kommentieren Sie die Access-Zeile oben aus
' Spielen Sie mit dem Skript auf Ihrem eigenen Server.
cnnGetString.Open Provider=SQLOLEDB;Data Source=10.2.1.214;
& Initial Catalog=samples;User Id=samples;Password=password;
& Connect Timeout=15;Network Library=dbmssocn;
' Führen Sie eine einfache Abfrage mithilfe des Verbindungsobjekts aus.
' Speichern Sie das resultierende Recordset in unserer Variablen.
Setze rstGetString = cnnGetString.Execute(Wähle * VON Grund auf)
„Jetzt wird es interessant... Normalerweise würden wir das tun
' eine Art Schleife, bis wir auf den letzten Datensatz stießen
' im Recordset. Dieses Mal werden wir alle Daten abrufen
' auf einen Schlag und wirf es in eine Schnur, damit wir es können
' Trennen Sie so schnell wie möglich die Verbindung zur DB.
strDBData = rstGetString.GetString()
„Da ich das zur Veranschaulichung zweimal mache ... positioniere ich es neu
' am Anfang des RS vor dem zweiten Aufruf.
rstGetString.MoveFirst
' Diesmal bitte ich um alles zurück im HTML-Tabellenformat:
strDBDataTable = rstGetString.GetString(adClipString, -1, _
&</td><td>, </td></tr> & vbCrLf & <tr><td>, )
„Aufgrund meines unstillbaren Wunsches nach ordentlichem HTML habe ich tatsächlich
' kürzen Sie als nächstes die Zeichenfolge. Sie sehen, GetString hat nur
' ein Parameter für das, was zwischen Zeilen geht, und kein separater Parameter
' eine für das, was nach der letzten Zeile platziert werden soll
' Art und Weise, wie HTML-Tabellen erstellt werden, lässt uns ein Extra übrig
' <tr><td> nach dem letzten Datensatz platziert
' ganzes Trennzeichen am Ende, da es nichts enthält
' sonst dort zu platzieren und in vielen Situationen funktioniert das gut.
' Bei HTML ist es einfach ein bisschen seltsam
„Schließe die Reihe und gehe weiter, aber ich konnte mich nicht dazu durchringen“
Lassen Sie die zusätzliche Zeile ... zumal sie eine hätte
' andere Anzahl von Zellen als alle anderen.
„Was soll ich sagen... diese Dinge stören mich ;)
strDBDataTable = Left(strDBDataTable, Len(strDBDataTable) - Len(<tr><td>))
' Einige Anmerkungen zu .GetString:
' Die Methode benötigt tatsächlich bis zu 5 optionale Argumente:
' 1. StringFormat – Das Format, in dem zurückgegeben werden soll
' adClipString ist der einzige Recordset-Text
' gültiger Wert.
' 2. NumRows – Die Anzahl der zurückzugebenden Zeilen
' bis -1, was alle Zeilen angibt.
' 3. ColumnDelimiter – Der Text, der zwischen den Spalten platziert werden soll.
'Standardmäßig ist ein Tabulatorzeichen
' 4. RowDelimiter – Der Text, der zwischen den Zeilen platziert werden soll
'Standardmäßig wird ein Wagenrücklauf verwendet
' 5. NullExpr – Ausdruck, der verwendet werden soll, wenn ein NULL-Wert vorliegt
' zurückgegeben. Standardmäßig eine leere Zeichenfolge.
'Schließen Sie unser Recordset und unsere Verbindung und entsorgen Sie die Objekte.
„ Beachten Sie, dass ich das tun kann, bevor wir uns überhaupt Sorgen machen
' zeigt irgendwelche der Daten an!
rstGetString.Close
Setze rstGetString = Nothing
cnnGetString.Close
Setze cnnGetString = Nothing
' Die Tabelle mit den Daten anzeigen muss ich wirklich nicht
' jegliche Formatierung seit dem GetString-Aufruf hat fast alles getan
' für uns in Bezug auf den Aufbau des Tabellentextes.
Response.Write <table border=1> & vbCrLf
Response.Write <tr><td>
Response.Write strDBDataTable
Response.Write </table> & vbCrLf
' Zu Ihrer Information: Hier ist das Ausgabeformat, das Sie erhalten, wenn Sie GetString können
' ohne Parameter:
Response.Write vbCrLf & <p>Hier ist die unformatierte Version:</p> & vbCrLf
Response.Write <pre> & vbCrLf
Response.Write strDBDataResponse.Write </pre> & vbCrLf
„Das ist alles, Leute!
%>