Optimera med GetRows och GetString
Förord
Alla vill vi skapa snabba websidor och det är inte alla gånger så lätt att få till sidor som är optimerade till max på alla fronter. Att öppna recordset tar kraft från datorn, men tack vare SQL behöver vi inte öppna något sådant när vi vill infoga, ta bort eller uppdatera poster. När vi vill hämta in data från databaser är vi dock tvungna till detta och då finns det två metoder som med fördel kan användas för att hämta poster från ett recordset på ett optimalt sätt, nämligen GetRows och GetString.
Nedan följer några exempel som beskriver dessa metoder.
Innehåll
» »
»
»
GetRows
Metoden GetRows hämtar alla data i ett recordset i ett enda anrop och sparar dem i en tvådimensionell vektor. Vi kan därmed omedelbart efter anropet stänga både recordsetet och databaskopplingen och sedan loopa igenom vektorn på traditionellt vis.
<%
arrayData = rs.GetRows()
rs.Close
Set rs = Nothing
conn.Close
Set conn = Nothing
Response.Write("")
For iRad = 0 To Ubound(arrayData, 2)
Response.Write("")
For iKol = 0 To Ubound(arrayData, 1)
Response.Write("")
Next
Response.Write("")
Next
Response.Write("" & arrayData(iKol, iRad) & "
")
%>
I exemplet ovan ser vi att kolumnerna hamnar i dimension två i vår vektor och posterna (eller raderna) hamnar i dimension ett. Genom att ta reda på högsta indexet i respektive vektordimension kan vi loopa genom vektorn rakt upp och ned.
Prestandavinsten med att använda GetRows gentemot vanlig loop med öppen databas blir påtaglig, särskilt med recordset med många poster. En testkörning med ett recordset med 50 000 poster tog med GetRows 10 120 ms och med vanlig loop 16 787 ms.
GetString
En snarlik funktion till GetRows är GetString som också hämtar innehållet i ett recordset i ett och samma anrop. Skillnaden ligger i att GetString formaterar hela tabellstrukturen och lägger alltihop i en textsträng. Till skillnad från GetRows så är GetString begränsad till att hålla samma struktur och formatering rakt genom när innehållet sedan skall presenteras. Precis som GetRows ges möjligheten att stänga recordsetet och databaskopplingen omedelbart efter anropet. All data finns kvar i variabeln och dessa kan vi presentera när vi känner för det. Det viktigaste i sammanhanget är att databasen är stängd.Ett exempel för GetString följer nedan:
<%
strData = rs.GetString(2,-1,"","","-Null-")
rs.Close
Set rs = Nothing
conn.Close
Set conn = Nothing
Response.Write("")
Response.Write(strData)
Response.Write("
")
%>
Som Ni ser ovan så tar GetString emot fem argument. Det första argumentet ("2") står för formatet kolumnavdelare, postavdelare, nullvärde. Detta är faktiskt det enda formatet som finns av GetString.
Det andra argumentet,"-1", anger att samtliga poster skall hämtas från recordsetet. Hade vi här angett till exempel 18 eller 35 så hade istället de första 18 respektive 35 posterna hämtats. Det tredje argumentet är en textsträng som läggs in efter varje kolumn och det fjärde argumentet läggs in efter varje post (eller rad).
Det femte och sista argumentet som tas emot ersätter eventuella nullvärden med textsträngen som anges.
Exempel att tanka
Fil: getrows_getstrings.zip
Var denna artikeln användbar?
Om du gör någon intressant (eller kanske något konstigt fel) på grund av detta material så skicka gärna det med ett mail eller bifoga en länk till mig så presenterar jag detta som ytterligare exempelfiler för kursen. Om detta innehållet är felaktigt eller du lärt dig fler finesser så skriv gärna en rad eller varför inte en egen kurs baserat på dina erfarenheter. Sänd gärna in dina tips till denna artikel./Staffan Berg