Jag håller på att diskutera med en kund som har missat en del stängningar av databasen(MySQL). Jag gav ett exempel på smidig kod som jag anser vara optimerad! Kunden tyckte min var krånglig eftersom att man måste komma ihåg indexet i arrayn istället för <%=RS("Adress")%>. Han frågade mig vilken jag tyckte var smidigast av följande:
Funktionen samt connstr lägger du i en include
<%
'Hämta databas info
'-------------------------------------------------------------------------------
Function getDbRows( strCon, strSql )
Set Conn = Server.CreateObject("ADODB.Connection")
Conn.Open strCon
Set RS = Conn.Execute( strSql )
If RS.EOF Then
rader=null
Else
rader = RS.getrows
End If
RS.close
Set RS = Nothing
Conn.Close
Set Conn=Nothing
getDbRows = rader
End Function
‘Databas sträng(koppling)
'--------------------------------------
connstr = "Driver={Mysql};Server=localhost;Database=databasen;UID=Användarnamn;PWD=lösenord"
minArray = getDbRows(connstr, "Select Namn, Adress From Users")
If not IsNull(minArray) Then
For i = 0 To Ubound(minArray,2)
%>
Namn: <%=minArray(0,i)%>
Adress: <%=minArray(1,i)%>
<%
Next
Else %>
Tomt I databasen
<% End If %>
Personligen gillar jag getrows, fungerar snabbt.Dock krångligt att se vad det är man skriver ut ibland. Av kundens alternativ är ju alternativ 2 det mest kloka,dumt att öppna databasen och stänga den hela tiden, tar mer prestanda
Din använder ju GetRows vilket är en fördel om databasen är stor. Men om du bara hämtar ut två fält kanske Recordset är bättre? Testa dig fram och mät tiden för exekvering med eller utan GetRows.
en grej man kan göra är att skapa constanter som heter som fälten i databasen och ge dem värdet av samma fält i arrayen, då ser man rätt tydligt vad man hämtar i sin array och det ger en väldigt liten prestanda förlust. För att öka tydligheten.
'## -- skapa en global connection för hela sidan --
'## -- sql-fråga --
'## -- hämta poster som array --
'## -- sql-fråga --
'## -- hämta poster som array --
'## -- sql-fråga --
'## -- hämta poster som array --
'## -- stäng connection när jag har hämtat allt som behövs --
'## -- börja loopa igenom arrayerna på rätt ställe --
'## -- FUNCTIONERNA I EN INCLUDE FIL --
funktionen för att hämta records som array:
Function GetDbRows(query, cnn)
Dim rst
Set rst = cnn.Execute(query)
If rst.EOF Then
GetDbRows = null
Else
GetDbRows = rst.GetRows()
End If
Set rst = Nothing
End Function
likadant har jag funktioner (metoder) för att skapa connection, recordset (både vanliga och adodb.recordsets)
Mest optimerat? ... klart enkelt att "administrera" med en vettig felhantering.
En annan sak som speedar upp hämtningar är att begränsa max antal poster som returneras. Till det krävs det ofta att man har en bra sökfunktion för att kunna "hitta rätt(a) post(er)".
Vilken nytta har användaren att 1000-tals poster returneras egentligen?
cya,
/PatrikB
139 ms totalt · 3 externa anrop · v20260731065814-full.b746b907