# Programmeren in ASP.NET/Werken met databanken
## OLEDB, ODBC, en ADO.NET

Je kunt met ASP.NET (of andere programmeeromgevingen) niet direct met een database werken. Hiervoor heb je een zogenaamde API (Application Programming Interface) nodig. Verder is er een verbinding met de database nodig. Een dergelijke verbinding wordt gemaakt met OLEDB of ODBC:
OLEDB of ODBC gebruik je via ADO.NET. ADO staat voor ActiveX Data Ojects. ADO is een verzameling objecten die als API dienen, en die je dus kan gebruiken in je code.
Om het bovenstaande te begrijpen kun je het geheel vergelijken met het telefoonnetwerk. ODBC is dan te vergelijken met het analoge telefoonnetwerk, OLEDB met ISDN (dezelfde functie, alleen sneller en geavanceerder). ADO.NET is het telefoontoestel en met SQL geef je aan welke gegevens je wil hebben, zoals je door een nummer te draaien aangeeft wie je wil spreken.

## Een databaseconnectie maken

Om met een database te kunnen communiceren, moet je een databaseconnectie hebben. Om deze te maken bevat ADO.NET het Connection-object. Nadat je een Connection-object hebt aangemaakt, open je een database met de Open-methode. Hierbij vermeld je de databank die je wil openen in een zogenaamde connectiestreng. Als je klaar bent met de gegevens gebruik je de Close-methode om de connectie weer te sluiten.

### Een connectiestring maken

De connectiestreng bevat alle gegevens waarmee de server de databank kan terugvinden en openen. In de connectiestreng specificeer je het type database, de plaats en de naam van de database. Je kan indien nodig ook parameters zoals een gebruikersnaam en wachtwoord opgeven.
Een connectiestreng bestaat uit namen van sleutels en waarden, gescheiden door puntkomma's.
Een connectiestreng ziet er bijvoorbeeld als volgt uit:
De volgorde van de verschillende sleutel/waarde koppels heeft geen belang.
Let op: spaties zijn soms heel belangrijk in deze strings, dus je moet ze letterlijk overnemen.
Dit zijn enkele veel voorkomende voorbeelden:

#### MS Access

Lees of voor een lijst met verschillende connectiestrengen voor verschillende databases.
Vooraleer een database te kunnen aanspreken in een ASPX-bestand, kan deze al of niet via DSN (ODBC) op de server ter beschikking gesteld worden.

### DSN

Als je wilt kan jij (of jouw provider) op de server een vaste naam (een soort "alias") voor de databankconnectie instellen. Vanuit alle ASPX-documenten is de database dan onder die naam bereikbaar. Dit noemt men een DSN (Data Source Name) voor de databank. In de telefoonanalogie van hierboven is DSN te vergelijken met een knop die je kan instellen op een bepaald telefoonnummer.

### Voordelen en nadelen van DSN
#### DSN

Het grote voordeel van de methode is dat bij het wijzigen (type of bestandsnaam) van de database niet alle ASP.NET documenten hoeven te worden aangepast. De database blijft immers gewoon onder zijn DSN-naam op de server bekend! In ASP.NET kan tegenwoordig de connectiestreng ook centraal ingesteld worden, zodat dit voordeel niet meer speelt.

#### DSN-loos

De DSN-loze methode wordt vaak gebruikt bij experimenten en tijdelijke pagina's. Het is erg eenvoudig om de te gebruiken database te wisselen. Het verschil is dat met DSN?less de connectiestreng in de code gewijzigd moet worden als er van een andere database gebruik gaat worden gemaakt of als de database op een andere locatie (subfolder) komt te staan. DSN-loze verbindingen maken het ook gemakkelijk om toepassingen naar andere machines te verplaatsen, omdat je dan niet telkens een DSN moet opzetten.
Sommige providers rekenen extra kosten voor DSN-verbindingen, dus in dat geval is DSN-loos goedkoper.
Tenslotte is een DSN-loze verbinding soms minder veilig, met name als het wachtwoord in de code moet geschreven worden. Iedereen die toegang krijgt tot de code heeft dan ook toegang tot het wachtwoord op de databank.

## Een connectie met DSN

Op de server wordt een DSN (Data Source Name) door de beheerder gedefinieerd. Dit kan gerealiseerd worden op verschillende manieren:
* via het configuratiescherm van Windows onder Administrative Tools - Data Sources (ODBC). Kies de klep System DSN. Klik Add. Kies Microsoft Access Driver (*.mdb). Kies een naam voor de connectie in "Data Source Name". Klik op "Select" en blader naar het databank bestand dat je wil koppelen.
* vanuit Visual Studio.NET
* vanuit FrontPage
* vanuit UltraDev of Dreamweaver MX
Veel databanken kan je bovendien beveiligen met een gebruikersnaam (UID) en wachtwoord (PWD).

### Een SQL Server-database openen met DSN

Een SQL Server-database die zich op de internetserver bevindt en die via ODBC als DSN-naam "leden" heeft kan als volgt benaderd worden:
waarbij x1 de gebruikersnaam en x2 het wachtwoord is waarmee de database te bereiken is.

### Een Access-database openen met DSN

Een Access-databank die zich op de internet-server bevindt en die via ODBC als DSN-naam "leden" heeft kan als volgt benaderd worden.
De connectiestreng is dus niets meer dan de DSN-naam!

## Een connectie zonder DSN

De mogelijkheid bestaat een SQL Server- of een Access-databank rechtstreeks te activeren. Dit kan als volgt:

### Een SQL Server-database openen zonder DSN

Een SQL-server database kan op deze manier opgeroepen worden:
waarbij:
* x1=naam of IP-nummer van de server
* x2=naam van de database op de SQL-server
Voor de connectiestreng zijn er nog verschillende mogelijkheden:

#### Windows Integrated authenticatie

of

#### SQL-Server authenticatie

waarbij:
* x1=naam of IP-nummer van de server
* x2=naam van de database op de SQL-server
* x3=loginnaam op de SQL-server
* x4=wachtwoord op de SQL-server

#### SQL Server 2005 bestandsgebaseerd

of
De punt in .\SQLEXPRESS staat hier voor de lokale server. Je mag ook (local)\SQLEXPRESS schrijven.
In de laatste string wordt de expressie |DataDirectory| automatisch vervangen door het juiste pad naar de folder App_Data binnen de website. Hierdoor is de connectiestring onafhankelijk van de server waarop de site draait, en kan je de pagina gewoon kopiëren naar de server met FTP zonder wijzigingen.

### SQL Server met ODBC

Het kan ook met ODBC als volgt:
Maar dan gebruik je een ODBCConnection in plaats van een SqlConnection.

### Een Access-databank openen via ODBC

Een Access databank kan ook zonder DSN-instellingen op de internetserver bereikt worden, en wel als volgt (DSN-loze ODBC-verbinding):
waarbij "adressen.mdb" de Access databank is.
Deze methode kan problemen geven als je de bestanden naar een andere server kopieert, waar de bestanden bijvoorbeeld op de d: schijf staan. Het kan zelfs zijn dat je de echte locatie van de bestanden niet weet.
Daarom is het altijd beter een relatief pad te gebruiken in je pagina's, relatief ten opzichte van de plaats van de huidige pagina. De server kan dit pad omzetten naar het echte absolute pad met de methode Server.MapPath.
Hoe dit gebeurt zie je in dit voorbeeld:
waarbij "App_Data\adressen.mdb" het relatieve pad is naar de databank adressen.mdb.
Opmerking Om een Access databank te kunnen openen, moet de gebruikersaccount de nodige bestandsrechten bezitten op het databank MDB-bestand (bv. adressen.mdb). ASP.NET maakt bij de installatie een gebruiker ASPNET (Windows 2000/XP) of NETWORK SERVICE (Windows 2003) aan, die gebruikt wordt tijdens het ganse proces (tenzij je impersonation gebruikt, zie hoofdstuk 25). Voor het opvragen van gegevens betekent dit dat de gebruiker ASPNET of NETWORK SERVICE leestoegang moet hebben tot het MDB-bestand. Voor het wijzigen van gegevens moet deze gebruiker bovendien modify-rechten hebben.

### Een Access-databank openen zonder ODBC

Er is nog een tweede manier om een Access-databank te openen zonder ODBC te gebruiken (DSN-loze OLEDB-verbinding):
De verbinding via OLEDB is iets sneller omdat de ODBC-driver overgeslagen wordt:
is sneller dan:

### Oefeningen

* Maak een pagina die een lijst toont met de uitgevers in de SQL Server-voorbeelddatabank "pubs". Gebruik een "trusted connection".
* Zelfde oefening, maar nu met een "untrusted connection".
* Maak een kleine databanktabel in Excel. Zoek op wat de connectiestreng is voor dit soort gegevensbron en toon de gegevens met een ASP.NET-pagina.
* Zelfde oefening, maar nu met een tekstbestand.

## Een connectiestring instellen in web.config

Je kan dezelfde instelling ook maken in web.config. Dan geldt ze niet voor de ganse applicatie, maar wel voor de ganse directory (en subdirectory's). Het opvragen is ook verschillend.
In ASP.NET 2.0 is hier een speciaal element <connectionStrings> voor toegevoegd aan web.config (als onderdeel van <configuration>).
web.config
De instelling kan je in je pagina's opvragen met deze code:
Als je nog werkt met ASP.NET 1.x, dan moet je het <appSettings>-element gebruiken:
web.config
De instelling kan je in je pagina's opvragen met deze code: