Bij ons Windows 2000/2003 hostingpakket kunt u optioneel een MS SQL server gebruiken. Hier leggen wij uit hoe een connectiestring eruit ziet. Ook tonen wij hoe een SQL database wordt geopend met het doel data op te halen.

Connectiestring

De connectiestring is de string waarin staat wat voor soort database u wilt openen, en waar deze is opgeslagen. Wij adviseren gebruik van OLEDB; deze is sneller dan ODBC. Daarnaast is de connectiestring altijd DSN-less. Een connectiestring ziet er dan als volgt uit:

Access (database staat in C:\www\database\klant\):
strConnectie= "Provider=Microsoft.Jet.OLEDB.4.0; " &_
"Data Source=C:\www\database\klant\klantdb.mdb;" &_
"User Id=admin;Password=;"


SQL Server
strConnectie = "Provider=SQLOLEDB.1;" &_
"Password=myPassword;" &_
"User ID=myUsername" &_
"Initial Catalog=myDatabaseName;" &_
"Data Source=db02.bedrijvenweb.nl;"


MySQL Server
strConnectie = "Driver={MySQL};Server=xxx.xxx.xxx.xxx;" &_
"Database=myDatabasseName;Uid=username;Pwd=password;"


In dit laatste voorbeeld is xxx.xxx.xxx.xxx het interne IP van de MySQL Server. Dit kan soms ook 'localhost' zijn.

Database openen en data ophalen

Wij gaan uit van een SQL-database. Nu we de connectiestring weten, kunt u de database connectie openen. Dit kan eenvoudig met de volgende twee regels:
Set objDataConn = Server.CreateObject("ADODB.Connection")
objDataConn.Open strConnectie


Nu de database connectie is geopend, kunt u gegevens uit de database halen. Allereerst maakt u een SQL-query:
strSQL = "SELECT fldID, fldKlantNaam, fldKlantCode FROM tblKlanten;"

Zoals u ziet halen wij drie velden uit de tblKlanten: fldId, fldKlantNaam en fldKlantCode. Het is belangrijk dat u de velden in uw query noemt, en niet SELECT * FROM tblKlanten doet. Het noemen van de velden in uw query is namelijk tijdwinst tijdens het uitvoer van de query. Ook is het makkelijker om de veldvolgorde te bepalen. U kunt nu de records uit de database halen, bijvoorbeeld op de volgende manier:
Set objRS = Server.CreateObject("ADODB.RecordSet")
objRS.Open strSQL, objDataConn, 3, 3

GetRows()

text Nu we de SQL-query hebben uitgevoerd is het belangrijk om de eventuele opgehaalde records verder te behandelen. Hiervoor gebruiken we de methode objRS.GetRows(x). Met deze methode kunt u een x-aantal rijen uit de recordset halen en deze in een array stoppen (wanneer u x weglaat worden alle records in de array gestopt). Dit gaat zeer snel en is daarom aan te raden om te gebruiken. Ook kan door gebruik te maken van deze methode de recordset en databaseconnectie zeer snel worden gesloten. Alvorens deze methode te kunnen gebruiken moeten we kijken of er daadwerkelijk gegevens uit de database zijn gehaald. Dit controleren we door de waarde objRS.EOF op te vragen. Wanneer deze TRUE is dan zijn er geen gegevens opgehaald. Bijvoorbeeld:

If Not objRS.EOF Then arrayRS = objRS.GetRows()

Deze regel controleert eerst of de recordset niet op het einde is (objRS.EOF) en wanneer dit niet zo is, stopt ie de records in een array (arrayRS = objRS.GetRows()). Nadat dit is gedaan kunt u de recordset en databaseconnectie weer sluiten

Recordset en database connectie sluiten

Het sluiten van de recordset en databaseconnectie moet u in het algemeen zo snel mogelijk doen. Dit komt ten goede van de serverprestaties. Het sluiten van de recordset en databaseconnectie gaat als volgt:

objRS.Close
set objRS = nothing
objDataConn.Close
set objDataConn = nothing

Deze regels zijn zeer belangrijk en moeten altijd worden aangeroepen. Hiermee sluit de server namelijk de connecties en ruimt deze ook op. Doet u dit niet, dan bestaat de kans dat de server trager wordt, wat voor zowel u als voor de andere gebruikers vervelend is.

Doorlopen van de array

Nu we de gegevens hebben (in een array) en de recordset en databaseconnectie netjes hebben opgeruimd, kunnen we kijken hoe we door de gegevens kunnen lopen. Allereerst gaan we controleren of we gegevens hebben. Dit doen we met de functie IsArray(arrayRS). Deze geeft de waarde TRUE als we een array hebben (en dus waarden uit de database) en FALSE als we geen waarden hebben (in dat geval hadden we arrayRS niet gemaakt). De gegevens zijn als het volgt opgeslagen in de array:

Rij 1, Veld 1 (fldID) = arrayRS(0, 0)
Rij 1, Veld 2 (fldKlantNaam) = arrayRS(1, 0)
Rij 1, Veld 3 (flfKlantID) = arrayRS(2, 0)

Rij 2, Veld 1 = arrayRS(0, 1)
Rij 2, Veld 2 = arrayRS(1, 1)
Rij 2, Veld 3 = arrayRS(2, 1)

Ofwel: Rij x, Veld y = arrayRS( y-1, x-1)
U ziet dat een array begint bij 0 en eindigt bij het aantal rijen (velden) - 1.

Het bepalen van hoeveel rijen een array heeft gaat als volgt:
intAantal = Ubound(arrayRS, 2)

Dit geeft precies het aantal rijen - 1 (totale aantaal rijen is dus intAantal + 1). We doorlopen de array met een simpele For-Loop waarmee we de waarden uitprinten:

'Eerst kijken of we gegevens hebben If IsArray(arrayRS) Then   For intI = 0 To UBound(arrayRS, 2)     Response.Write "ID: " & arrayRS(0, intI) & ""     Response.Write "Naam: " & arrayRS(1, intI) & ""     Response.Write "KlantID: " & arrayRS(2, intI) & "

"
  Next
End If

Totaal

Het totaal komt er hierdoor als volgt uit te zien:

'Database connectie bepalen
strConnectie= "Provider= Microsoft.Jet.OLEDB.4.0; DataSource= C:\www\database\klant\klantdb.mdb;UserId= admin;Password= ;"

'Database connectie openen
Set objDataConn = Server.CreateObject("ADODB.Connection") objDataConn.Open strConnectie

'SQL-query opgeven
strSQL = "SELECT fldID, fldKlantNaam, fldKlantCode FROM tblKlanten;"

'Recordset openen
Set objRS = Server.CreateObject("ADODB.RecordSet")
objRS.Open strSQL, objDataConn, 3, 3

'Controleren of er gegevens zijn en zo ja, in een array stoppen
If Not objRS.EOF Then arrayRS = objRS.GetRows()

'Recordset en connectie weer sluiten en opruimen
objRS.Close
set objRS = nothing
objDataConn.Close
set objDataConn = nothing

'Kijken of we gegevens hebben, zo ja, doorlopen van deze gegevens
If IsArray(arrayRS) Then
    For intI = 0 To UBound(arrayRS, 2)
        Response.Write "ID: " & arrayRS(0, intI) & "
"
        Response.Write "Naam: " & arrayRS(1, intI) & "
"
        Response.Write "KlantID: " & arrayRS(2, intI) & "

"
    Next
'We hebben geen gegevens, dus naar even bericht laten zien
Else
    Response.Write "Er zijn gegevens"
End If

Links

Dit was een kleine uitleg van een manier om databases aan te spreken en gegevens te raadplegen. Ons advies luidt om alles eerst offline te testen, alvorens dit op onze servers te zetten. Tevens is het handig om onderstaande links eens te bekijken:

http://www.learnasp.com/learn/dbtablegetrows.asp
http://www.4guysfromrolla.com/webtech/tips/t053100-1.shtml

http://www.4guysfromrolla.com/webtech/063099-1.shtml



Bedrijvenweb is onderdeel van IT-Ernity
Bedrijvenweb is onderdeel van IT-Ernity
Bedrijvenweb - ISO 27001 gecertificeerd
Bedrijvenweb - ISO 27001 gecertificeerd
Bedrijvenweb - ISO 9001 gecertificeerd
Bedrijvenweb - ISO 9001 gecertificeerd