ASP bijlage

Mijn eerste ASP pagina: Hallo wereld!
Een ASP pagina bestaat uit script en eventueel HTML. Het script staat tussen
<% en %> en kan tussen de HTML in staan.

Om pagina's dynamisch te maken, moet je met ASP tekst naar de browser kunnen sturen. Dit kun je doen met het Response.Write statement. De waarde die we hieraan meegeven wordt naar de browser gestuurd. We kunnen dit het beste laten zien met een voorbeeld:

helloworld1.asp
<HTML>
<BODY>
<%
'Schrijf naar de browser
Response.Write "Hallo wereld!"
%>
</BODY>
</HTML>

Voor de regel die daadwerkelijk wat doet, staat een regel met een '-teken ervoor. Dit is commentaar, waardoor je beter ziet wat er gebeurt. Het is, vooral met grotere stukken code, verstandig om commentaar in te voegen. Zoals je ziet staat de code midden tussen de HTML. Dit hoeft niet op één plek te zijn, dat kan ook op meerdere plaatsen. Bijvoorbeeld zo:

helloworld2.asp
<HTML>
<HEAD>
<TITLE>
<%
Response.Write "Voorbeeld: Hallo wereld!"
%>
</TITLE>
</HEAD>
<BODY>
<%
Response.Write "Hallo wereld!"
%>
</BODY>
</HTML>

In het bovenstaande script schrijven we niet alleen wat in het browser-scherm, maar ook in de titelbalk.

Het is niet verstandig om te veel HTML en ASP door elkaar te zetten. ASP moet dan vaak een zogenaamde context switch maken en dat kost tijd.

Response.Write
Response.Write bestaat eigenlijk uit twee delen. Het gedeelte voor de punt is het Response object, dat gebruikt wordt voor interactie met de gebruiker. Het tweede gedeelte is een methode van het Response object. In dit geval is dat de Write methode, waarmee tekst naar de browser gestuurd wordt. Andere methoden worden in andere lessen besproken.

Werken met variabelen

Variabelen worden gebruikt om een waarde in op te slaan. Deze waarde kan tijdens het uitvoeren van de code veranderen, maar we kunnen de waarde telkens gebruiken door de naam op te geven. In de meeste programmeertalen heeft een variabele een datatype. In ASP is dit echter niet zo, alle variabelen zijn van het type Variant (VBScript). Een variabele heeft wel een impliciet subtype. Dit kan nog wel eens tot rare dingen leiden doordat bijvoorbeeld een nummer met een tekst die een nummer weergeeft wordt vergeleken, terwijl deze voor het programma niet gelijk zijn.

Het onderstaande voorbeeld illustreert het gebruik van variabelen. Er wordt een variabele gemaakt die vervolgens naar de browser geschreven wordt:

vars1.asp
<HTML>
<BODY>
<%
MijnVar = "Hallo wereld!"

Response.Write MijnVar
%>
</BODY>
</HTML>

In het bovenstaande voorbeeld wordt de variabele zomaar gebruikt. Hoewel dit zonder meer kan heeft dit een ernstig nadeel. Als je een typfout zou maken, dan is het resultaat onjuist. Stel je voor dat we Response.Write MijnVa hadden geschreven. Dan zou ASP dat als een nieuwe variabele beschouwen en zou er niets in de browser verschijnen. Het is daarom handig om het verplicht te maken variabelen eerst te declareren. Dit doe je door als eerste regel in het script het Option Explicit statement te plaatsen. Daarna moet elke variabele eerst benoemd worden met het Dim statement.

vars2.asp
<%Option Explicit%>
<HTML>
<BODY>
<%
Dim MijnVar

MijnVar = "Hallo wereld!<br>"

Response.Write MijnVar
MijnVar = " Dit script gebruikt Option Explicit"

Response.Write MijnVar
%>
</BODY>
</HTML>

Als we in de bovenstaande code dezelfde fout zouden maken, dan zou ASP een foutmelding geven en ons melden dat de variabele niet bestaat.
 

Werken met array's

Een array is een variabele waarin meerdere waarden tegelijk opgeslagen kunnen worden. Iedere waarde heeft een andere plek in de array die bepaald wordt met een index. Deze waarden kunnen net als bij een normale variabele gewijzigd worden als de code wordt uitgevoerd.

Een array wordt op dezelfde manier gedeclareerd als een gewone variabele, maar erachter wordt tussen haakjes weergegeven hoeveel waarden er in moeten passen.

array1.asp
<%
Option Explicit

Dim MijnArray(3)

MijnArray(0) = "Piet"
MijnArray(1) = "Jan"
MijnArray(2) = "Klaas"
%>
<HTML>
<BODY>
<%
Response.Write "Namen:<br>"
Response.Write MijnArray(0) & " <br>"
Response.Write MijnArray(1) & " <br>"
Response.Write MijnArray(2) & " <br>"
%>
</BODY>
</HTML>
 

Werken met keuze statements

Met keuze statements kunnen we een stuk code al dan niet uitvoeren. Als er aan een bepaalde voorwaarde voldaan wordt, wordt de code uitgevoerd, anders niet. Er zijn twee soorten keuze statements, If ... Then en Select Case. Beiden worden hieronder besproken.

If ... Then

Het If ... Then statement is betrekkelijk eenvoudig, en kan het beste uitgelegd worden met een voorbeeld:

ifthen1.asp
<%
Option Explicit

Dim blDoen

blDoen = True
%>
<HTML>
<BODY>
<%
If blDoen = True Then
Response.Write "Deze code wordt uitgevoerd"
Else
Response.Write "Deze code wordt NIET uitgevoerd"
End If
%>
</BODY>
</HTML>

De code hierboven kijkt of de variabele blDoen waar is en voert vervolgens de code meteen na deze test uit (want het klopt). Was dit niet het geval geweest, dan was de code na Else uitgevoerd. De constructie wordt afgesloten met End If.

Noot: In de bovenstaande code is de naam van de variabele voorafgegaan door bl. Dit is zodat je onthoudt dat we met een variabele van het sub-type Boolean werken. Een Boolean kan twee waarden hebben, True (waar) of False (niet waar).

Zouden we meer voorwaarden hebben, dan kunnen we deze aaneen schakelen met And (en) of Or (of). Verder kunnen we ook meerdere ElseIf ... Then statements toevoegen om meerdere keuzes te hebben. Het voorbeeld hieronder laat beide zien.

ifthen2.asp
<%
Option Explicit

Dim lngGetal
Dim blDoen

blDoen = True
lngGetal = 2
%>
<HTML>
<BODY>
<%
If blDoen = True And lngGetal = 1 Then
Response.Write "Deze code wordt NIET uitgevoerd"
ElseIf blDoen = True And lngGetal = 2 Then
Response.Write "Deze code wordt uitgevoerd"
ElseIf blDoen = True Or lngGetal = 3 Then
Response.Write "en deze code wordt ook NIET uitgevoerd"
Else
Response.Write "Deze code wordt NIET uitgevoerd"
End If
%>
</BODY>
</HTML>


Select Case

Bij het If ... Then statement zagen we dat we meerdere keuzes konden geven door ElseIf ... Then statements te gebruiken. Met het Select Case statement kunnen we dezelfde constructie maken, alleen dan makkelijker. Hierbij wordt eenmalig een expressie (een variabele of een serie statements die tot een variabele evalueren) gegeven en het resultaat daarvan wordt telkens vergeleken met de gegeven Case. Ook dit is makkelijk uitgelegd met een voorbeeld:

select1.asp
<%
Option Explicit

Dim lngGetal

lngGetal = 2
%>
<HTML>
<BODY>
<%
Select Case lngGetal
Case 1
Response.Write "Deze code wordt NIET uitgevoerd"
Case 2
Response.Write "Deze code wordt uitgevoerd"
Case 3
Response.Write "Deze code wordt NIET uitgevoerd"
Case Else
Response.Write "Deze code wordt NIET uitgevoerd"
End Select
%>
</BODY>
</HTML>

Noot: In de bovenstaande code is de naam van de variabele voorafgegaan door lng. Dit is zodat je onthoudt dat we met een variabele van het sub-type Long werken. Een Long is een getal-type dat waarden kan hebben tussen 2.147.483.648 en -2.147.483.647.
 

Opdrachten meerdere keren uitvoeren

Het kan in veel gevallen handig zijn om een stuk code meerdere keren uit te voeren. Bijvoorbeeld als je de waarden uit een array weer wilt geven. Je kunt daarvoor telkens dezelfde code gebruiken, als de index maar verandert. Dit is vooral handig als je van te voren niet weet hoeveel waarden een array bevat.

Je kunt opdrachten meerdere keren uitvoeren met behulp van loops. Er zijn twee soorten loops, een die een bepaald aantal keer uitgevoerd wordt en een die uitgevoerd wordt totdat er aan een bepaalde voorwaarde is voldaan (of zolang er juist niet aan een bepaalde voorwaarde is voldaan). De eerste noemen we een For ... Next loop, de andere een Do ... Loop loop. Hieronder worden ze beiden besproken.

For ... Next

Een For ... Next loop werkt op basis van een teller die we eerst declareren. Er wordt vervolgens aangegeven waar de teller moet beginnen en waar die moet eindigen. Deze teller wordt elke keer als de opdrachten uitgevoerd zijn met één verhoogd, totdat de hoogste waarde is bereikt. Eventueel kan de teller ook met meer tegelijk verhoogd worden. Het voorbeeld hieronder is heel eenvoudig. De index wordt bij iedere stap naar de browser geschreven (met een harde return).

fornext1.asp
<%
Option Explicit

Dim i

%>
<HTML>
<BODY>
<%
For i = 1 To 20
Response.Write i & "<br>"
Next
%>
</BODY>
</HTML>
 

Array's lenen zich erg goed voor dergelijke loops. Je kunt dit zien in het onderstaande voorbeeld. Hierin gebruiken we de Split functie om een string met waarden gescheiden door komma's om te vormen tot een array. Vervolgens gebruiken we de UBound functie om te kijken hoeveel waarden er in de array zitten.

fornext2.asp
<%
Option Explicit

Dim i
Dim strWaarden
Dim aWaarden
Dim lngAantal

strWaarden = "Jan,Piet,Klaas,Kees"

'Splits string en zet in array
aWaarden = Split(strWaarden, ",")

'Kijk hoeveel waarden er in de array zitten
lngAantal = UBound(aWaarden)
%>
<HTML>
<BODY>
<%
For i = 0 To lngAantal
Response.Write aWaarden(i) & "<br>"
Next
%>
</BODY>
</HTML>

Do ... Loop

Do ... Loop heeft meer mogelijkheden dan For ... Next, maar je moet ook meer zelf doen. Je moet zelf bepalen welke voorwaarden er moeten zijn om de code (nogmaals) uit te voeren. Als je een teller gebruikt moet je die ook zelf ophogen. Als je dit vergeet, blijft de loop oneindig doorlopen. We geven twee voorbeelden:

doloop1.asp
<%
Option Explicit

Dim i
%>
<HTML>
<BODY>
<%
'Initialiseer waarde
i = 1

Do While i < 21
Response.Write i & "<br>"
i = i + 1
Loop
%>
</BODY>
</HTML>

doloop2.asp
<%
Option Explicit

Dim i
%>
<HTML>
<BODY>
<%
'Initialiseer waarde
i = 1

Do
Response.Write i & "<br>"
i = i + 1
Loop Until i = 21
%>
</BODY>
</HTML>

In het tweede voorbeeld weet je dat de opdrachten minimaal één keer worden uitgevoerd. In het voorbeeld daarvoor is dat niet zo. Verder zijn While en Until uitwisselbaar. Het hangt af van de situatie welke handiger is om te gebruiken.
 

Werken met formulieren

In dynamische sites komt het veel voor dat de gebruiker via een HTML-formulier gegevens naar de server stuurt. Met ASP kunnen we die gegevens gebruiken om bijvoorbeeld op te slaan in een database, te versturen via een email of juist andere gegevens op te zoeken.

De gegevens in een formulier kunnen op twee manieren naar de server gestuurd worden, met de POST of met de GET methode. Met POST worden de gegevens naar de server gestuurd als onderdeel van de HTTP headers, met GET als onderdeel van de URL. In het laatste geval staan de gegevens achter een ? dat achter de bestandsnaam staat:
http://www.voorbeeld.nl/voorbeeld.asp?naam=Jan%20Smit&land=Nederland

De verschillende waarden worden gescheiden door & tekens, verder worden bijvoorbeeld spaties gecodeerd zodat er geen onbruikbare URL ontstaat. GET heeft als nadeel dat de gegevens deel uit maken van de URL, wat vooral onhandig is als het om bijvoorbeeld een password gaat. Verder is de lengte van een URL beperkt, voor de meeste browsers tot ongeveer 1.000 karakters.

Welke manier je ook gebruikt, de waarden in het formulier zijn ALTIJD van het subtype String. Dit betekent dat als je een getal verstuurt deze toch nog eerst geconverteerd moet worden naar een getal subtype zoals Integer, Long, Single of Double. Dit kan respectievelijk met de functies CInt(), CLng(), CSng() en CDbl().

Gegevens gebruiken met de POST methode
Wanneer de POST methode is gebruikt, kunnen we waardes uitlezen uit de Form Collectie van het Request object met de opdracht Request.Form("NaamVanWaarde"). Hieronder zie je een voorbeeld van het HTML formulier en vervolgens de code om er wat mee te doen.

form1.asp
<HTML>
<BODY>
<form method="POST" action="form1post.asp">
<table>
<tr>
<td>
Naam
</td>
<td>
<input type="text" name="naam">
</td>
</tr>
<tr>
<td>
Land
</td>
<td>
<input type="text" name="land">
</td>
</tr>
</table>
<input type="submit" value="Verstuur">
<form>
</BODY>
</HTML>


form1post.asp
<%
Option Explicit
%>
<HTML>
<BODY>
<%
Response.Write "Hallo " & Request.Form("naam") & " uit " & Request.Form("land")
%>
</BODY>
</HTML>

Gegevens gebruiken met de GET methode
Wanneer de GET methode is gebruikt, kunnen we waardes uitlezen uit de QueryString Collectie van het Request object met de opdracht Request.QueryString("NaamVanWaarde"). Hieronder zie je een voorbeeld van het HTML formulier en vervolgens de code om er wat mee te doen.

form2.asp
<HTML>
<BODY>
<form method="GET" action="form2get.asp">
<table>
<tr>
<td>
Naam
</td>
<td>
<input type="text" name="naam">
</td>
</tr>
<tr>
<td>
Land
</td>
<td>
<input type="text" name="land">
</td>
</tr>
</table>
<input type="submit" value="Verstuur">
<form>
</BODY>
</HTML>


form2get.asp
<%
Option Explicit
%>
<HTML>
<BODY>
<%
Response.Write "Hallo " & Request.QueryString("naam") & " uit " & Request.QueryString("land")
%>
</BODY>
</HTML>
 

Application object

In de les over variabelen hebben we kunnen zien hoe we variabelen binnen een pagina kunnen gebruiken. Helaas zijn die variabelen niet buiten een pagina beschikbaar en dus niet geschikt om gegevens te delen tussen pagina's. Als we dat willen, dan moeten we gebruik maken van het Application object. Dit object maakt het mogelijk gegevens te delen tussen alle pagina's in een (IIS) applicatie.

Met het Application object kunnen we bijvoorbeeld een teller maken die telt hoe vaak een pagina bezocht is, maar ook kunnen we bijvoorbeeld gegevens over de database koppeling, of andere waarden die we door de hele site nodig hebben, opslaan. We laten zien hoe een teller eruit ziet (ververs de pagina om het resultaat te zien):

appvar1.asp
<%
Option Explicit
%>
<HTML>
<BODY>
<%
Application("Teller") = Application("Teller") + 1
Response.Write Application("Teller")
%>
</BODY>
</HTML>

Stel dat de bovenstaande code tegelijk door twee verschillende mensen bekeken zou worden. Doordat ASP niet alle scripts meteen helemaal afmaakt, maar soms de uitvoering kan stoppen om even een ander script (deels) uit te voeren, zou het zo kunnen zijn dat de waarde die je ziet niet klopt. De waarde zou namelijk opgehoogd kunnen zijn, daarna opgehoogd kunnen zijn door de andere gebruiker en daarna pas in jouw browser geschreven worden. Nou is dit bij een teller niet zo belangrijk, maar het kan zijn dat het wel om informatie gaat die belangrijk is. In dat geval kun je de Lock methode gebruiken om ervoor te zorgen dat er geen andere gebruikers zijn die tegelijk toegang krijgen tot de waardes in het Application object. Omdat dit vertragend werkt moet dit alleen gedaan worden als het nodig is, waarna zo snel mogelijk de Unlock methode wordt gebruikt:
appvar2.asp
<%
Option Explicit
%>
<HTML>
<BODY>
<%
Application.Lock
Application("Teller") = Application("Teller") + 1
Response.Write Application("Teller")
Application.Unlock
%>
</BODY>
</HTML>
 

Session object

Wat is een sessie?
We praten over een sessie als een gebruiker een pagina van een website opvraagt. Alle pagina's die de gebruiker opent behoren tot dezelfde sessie. Een sessie eindigt als de browser gesloten wordt of als de gebruiker voor een bepaalde tijd geen pagina's meer heeft opgevraagd.
Wat is het Session object?
Binnen een sessie is het handig om gegevens te bewaren die relevant zijn voor de gebruiker, bijvoorbeeld een gebruikersnaam en password zodat we weten of de gebruiker toegang heeft tot bepaalde gegevens. Het zou vervelend zijn als de gebruiker deze gegevens telkens weer op zou moeten geven. We kunnen deze gegevens opslaan in het Session object. Het Session object werkt ongeveer hetzelfde als het Application object, met het verschil dat de gegevens in het Application object voor alle gebruikers "zichtbaar" zijn.

session1.asp
<HTML>
<BODY>
<%
Session("Teller") = Session("Teller") + 1
Response.Write Session("Teller")
%>
</BODY>
</HTML>

Als je de bovenste code meerdere keren zou uitvoeren, zou je denken dat het precies hetzelfde doet als het Application object. Zelfs als je de browser waarin het weergegeven wordt sluit en opnieuw opent, telt de teller gewoon door. Dit komt omdat die browser telkens door de browser waarin je nu leest geopend wordt. Zou je ook deze sluiten en dan een nieuwe browser openen, dan zou er wel een nieuwe sessie zijn en de teller begint dan weer bij 1. Wat je ook kunt doen is een nieuwe browser opstarten (vanuit het Start menu) en dan de pagina nog een keer opvragen.
Hoe werkt het Session object?
De waardes in het Session object worden opgeslagen in het geheugen van de server. Om bij te houden welke sessie van een bepaalde gebruiker is, wordt er een cookie naar de browser gestuurd met een unieke waarde erin: de SessionID. Iedere keer als de browser een aanvraag doet, wordt deze cookie meegestuurd en weet de server welke sessie erbij hoort. Deze cookie wordt ongeldig als de browser gesloten wordt, of er 20 minuten verstreken zijn sinds de laatste aanvraag.

session2.asp
<HTML>
<BODY>
<%
Response.Write Session.SessionID
%>
</BODY>
</HTML>

Browsers die geen cookies accepteren, kunnen ook niet met een sessie werken. Daar komt bij dat als je veel waardes opslaat in het Session object dat dit nadelige gevolgen heeft voor de snelheid van de server. Gebruik het dus alleen als je het echt nodig hebt.
Het Session object heeft nog meer mogelijkheden. Gezien deze erg weinig gebruikt worden, zijn die mogelijkheden geen onderdeel van deze lessen.

Een database openen

Om met een database te kunnen communiceren, moeten we een database connectie hebben. Om deze te maken bevat ADO het Connection object. Nadat we een Connection object hebben aangemaakt, openen we een database met de Open methode. Hierbij vermelden we de database die we willen openen in een zogenaamde ConnectionString.

Een ConnectionString maken
In de ConnectionString specificeren we het type database, de plaats van de database en de database naam. We kunnen eventueel ook een gebruikersnaam en password opgeven. We kunnen ook een gebruikersnaam en password opgeven bij de Open methode. Doen we dit, dan worden eventuele waarden in de ConnectionString genegeerd. Een ConnectionString ziet er als volgt uit:

SQL Server
Provider=sqloledb;Data Source=MijnSQLServer;Initial Catalog=MijnDB;User Id=ik;Password=uhm;

MS Access
Provider=Microsoft.Jet.OLEDB.4.0;Data Source=c:\databases\MijnDB.mdb;

Lees voor meer informatie het artikel De snelste database verbinding, of ga naar http://www.able-consulting.com/ado_conn.htm voor een lijst met verschillende ConnectionStrings voor verschillende databases.

Voorbeeld
In het onderstaande voorbeeld openen we een database en kijken we of het openen geslaagd is. We hebben de ConnectionString in het Application object opgeslagen, zodat we die niet telkens opnieuw moeten maken. Anders zouden we ook alle pagina's moeten herschrijven als we met een andere database zouden gaan werken.

openconn.asp
<%
Option Explicit

Dim objConn
Dim strResultaat

'Maak Connection object
Set objConn = Server.CreateObject("ADODB.Connection")

'Open database
objConn.Open Application("ConnString")

'Check status
If objConn.State = adStateClosed Then
strResultaat = "De database is niet geopend! Er is iets fout."
Else
strResultaat = "De database is geopend, we sluiten 'm weer af"

'Sluit database
objConn.Close
End If

'Geef Connection object vrij
Set objConn = Nothing
%>
<HTML>
<BODY>
<%
Response.Write strResultaat
%>
</BODY>
</HTML>

In het bovenstaande voorbeeld gebruiken we onder andere de constante adStateClosed. Dit is een constante die voor ADO van belang is. We kunnen echter niet zonder meer gebruik maken van deze constante. Deze moet eerst gedefinieerd worden. Dit kan op drie manieren:

Zelf definiëren met Const adStateClosed = 0
Het bestand adovbs.inc als include bestand aanroepen. Je kunt dit bestand vanuit C:\Program Files\Common Files\System\ado naar je website kopiëren. Vervolgens zet je de volgende regel onderaan je ASP pagina:
<!--#include virtual="/adovbs.inc"-->
Door de Type Library op te geven in global.asa. Je hoeft dan nergens in applicatie een van de andere methoden te gebruiken. Zet de volgende code in global.asa:
<!-- METADATA TYPE="TypeLib" File="C:\Program Files\Common Files\System\ado\msado15.dll" -->

Wat is een recordset?

Een recordset is een verzameling records die geretourneerd wordt als we gegevens uit een database opvragen met SQL. ADO bevat het Recordset object, zodat je deze gegevens kunt manipuleren. Je kunt onder andere door de records in een recordset heen bladeren, de records wijzigen of records toevoegen (zolang de cursor niet ReadOnly is), de gegevens opslaan in een bestand, XML of een array.

Wat is een Cursor?
Om door de records heen te kunnen navigeren heeft een recordset een cursor. De cursor staat op het huidige record (mits er records in de recordset zitten). Er zijn verschillende typen cursors, met verschillende mogelijkheden. Hieronder staat een overzicht van de verschillende cursors:

Cursor Eigenschappen
adOpenForwardOnly Alleen van voor naar achter door de recordset bladeren.
Updates van anderen zijn niet zichtbaar.
adOpenStatic Heen en weer bladeren mogelijk.
Updates van anderen zijn niet zichtbaar.
adOpenDynamic Heen en weer bladeren mogelijk.
Updates van anderen zijn zichtbaar.
adOpenKeyset Zoals adOpenDynamic, maar met wat verschillende details.

Een gedetailleerd overzicht van cursor-eigenschappen vind je hier.

Wat is het Lock-type?
Een recordset kan alleen-lezen zijn, of wijzigbaar. Naast alleen-lezen zijn er drie soorten wijzigbare recordsets. Hieronder staat een overzicht met de mogelijke Lock-types:

Lock-type Eigenschappen
adLockReadOnly Alleen lezen
adLockPessimistic Zodra er wijzigingen in een record worden aangebracht, wordt deze gesloten voor andere gebruikers. Wanneer de Update methode wordt aangeroepen, wordt het record in de database gewijzigd en vrijgegeven.
adLockOptimistic Wijzigingen worden doorgevoerd in de database als de Update methode wordt aangeroepen. Pas dan probeert ADO een lock te krijgen.
adLockBatchOptimistic Handig als er meerdere wijzigingen gedaan moeten worden. Eerst pas je alle records in de recordset aan en vervolgens gebruik je de UpdateBatch methode om alle records in één keer te wijzigen in de database.

Welk Cursor- en Lock-type moet ik gebruiken?
Een recordset dat meer mogelijkheden heeft dan nodig is, verspilt behoorlijk wat geheugen en kost snelheid. Het is dus nodig om het beste type recordset te gebruiken voor wat je wilt. Hoef je geen updates te doen, dan gebruik je een ReadOnly recordset. In andere gevallen kun je over het algemeen het beste Optimistic of BatchOptimistic gebruiken.

Binnen ASP is het eigenlijk niet nodig om de wijzigingen van andere gebruikers te zien. Het is daarom verstandig om ForwardOnly of Static te gebruiken waar mogelijk. In deze tabel kun je zien wanneer je over moet schakelen naar Dynamic of Keyset cursors.
 

Een recordset weergeven

De inhoud van een recordset weergeven kan op meerdere manieren. De makkelijkste en meest gebruikte manier is door de recordset heen bladeren en stuk voor stuk de records naar de browser schrijven. Door de manier waarop ADO met databases om gaat, is dit echter niet de meest efficiënte methode. Een voor ASP betere (snellere) methode is alle records in een array schrijven met een speciaal daarvoor gemaakte functie: GetRows. Omdat het belangrijk is dat je meteen de goede methode leert, geven we daarvan een voorbeeld. Wil je meer informatie hierover lees dan Data ophalen met GetRows.

In het onderstaande voorbeeld openen we een database, halen we de gegevens op met GetRows en geven we vervolgens de gegevens weer in een HTML-tabel.

select.asp
<%
Option Explicit

Dim objConn
Dim objRs
Dim arrRs
Dim strSQL
Dim lngVelden
Dim lngRecords
Dim i, j

'Maak SQL statement
strSQL = "SELECT CompanyName, Address, PostalCode, City, Country FROM Customers""

'Maak Connection object
Set objConn = Server.CreateObject("ADODB.Connection")

'Open database
objConn.Open Application("ConnString")

'Maak Recordset object
Set objRs = Server.CreateObject("ADODB.Recordset")

'Open recordset
objRs.Open strSQL, objConn, adOpenForwardOnly, adLockReadOnly

'Als er records zijn, sla ze op in een array
If Not objRs.EOF Then
arrRs = objRs.GetRows()
lngVelden = UBound(arrRs)
lngRecords = UBound(arrRs, 2)
Else
lngRecords = -1
End If

'Sluit Recordset
objRs.Close

'Geef Recordset object vrij
Set objRs = Nothing

'Sluit database
objConn.Close

'Geef Connection object vrij
Set objConn = Nothing
%>
<HTML>
<BODY>
<TABLE BORDER="1">
<%
For i = 0 To lngRecords
Response.Write "<TR>"
For j = 0 To lngVelden
Response.Write "<TD>" & arrRs(j, i) & "</TD>"
Next
Response.Write "</TR>"
Next
%>
</TABLE>
</BODY>
</HTML>