# Programmeren in ASP.NET/Databankgegevens wijzigen
## SQL-opdrachten uitvoeren

SQL-opdrachten die gegevens wijzigen (zoals INSERT INTO, UPDATE of DELETE) geven geen resultaten terug zoals SELECT. De manier om deze opdrachten te gebruiken is dus verschillend. Gebruik hiervoor het OleDbCommand-object, en roep hiervan de ExecuteNonQuery-methode aan.

## Gegevens toevoegen

Deze code voert een "INSERT INTO" opdracht uit:
ASP.NET-code: "INSERT INTO"
Opmerkingen:
* Als je bij een Access-databank de foutmelding "Operation must use an updateable query" krijgt, dan betekent dit dat de gebruiker ASPNET (Windows 2000, XP) of NETWORK SERVICE (Windows 2003) op de server niet voldoende rechten bezit op het Access-bestand. Deze gebruiker moet het recht hebben om het Access-bestand te wijzigen.
* In SQL Server moet de gebruiker het INSERT-recht hebben voor de tabel in kwestie.
* De methode ExecuteNonQuery geeft als return-waarde een Integer terug met het aantal records dat aangepast werd. Je kan die waarde gebruiken om te testen of het bijwerken gelukt is:

## Parameters gebruiken bij het bijwerken

In de bovenstaande code zal je meestal de naam en de voornaam niet op voorhand kennen. Deze gegevens komen bijvoorbeeld uit een formulier dat de gebruiker ingevuld heeft.
Je moet hier dus weer met parameters werken in het Command-object.
Opmerkingen:
* In de SQL-streng vervang je de variabelen (de parameters) door woorden die beginnen met een apenstaart:
* Je voegt de echte waarden van de parameters toe met de opdrachten:
* Let goed op: in OleDb moeten de parameters toegevoegd worden in dezelfde volgorde waarin ze in de SQL-streng voorkomen, dus eerst de naam, dan de voornaam. Zelfs als je duidelijk dezelfde aanduiding @Naam gebruikt, zal dit geen enkel effect hebben. Deze aanduiding wordt gewoon genegeerd, het is alleen de volgorde die telt. De aanduiding heeft alleen nut voor jou als programmeur om het iets overzichtelijker te maken.
* Natuurlijk moeten er ook evenveel parameters toegevoegd worden als er vraagtekens zijn. Anders krijg je de foutmelding: "No value given for one or more required parameters".
* Zorg ervoor dat de waarde van een parameter nooit Nothing kan zijn. Anders krijg je de foutmelding: "Parameter @x has no default value".

### Oefeningen

* Maak een formulier "invoer.htm" om adressen in te voeren. Stuur de gegevens naar een tweede pagina "verwerk.aspx". Voeg het ingevoerde adres toe aan de databank. Merk op dat het formulier zelf geen ASP-code bevat (alleen HTML).
* Zelfde oefening, maar zet nu het formulier en de verwerking in één enkele (aspx-)pagina.
* Maak een formulier om verjaardagen toe te voegen aan een databank met een "verjaarkalender".
* Schrijf een script dat alle records van een tabel in Access kopieert naar een gelijkaardige tabel in SQL Server.

## Gegevens bijwerken

De code hieronder voert een "UPDATE"-opdracht uit. Merk op dat je ook hier voor de WHERE-clause een parameter gebruikt.
Bij een UPDATE-commando kan het gebeuren dat je geen foutmelding krijgt, maar dat er toch niets bijgewerkt wordt. Meestal komt dit doordat de WHERE-conditie verkeerd geschreven is, zodat er geen enkel record aan voldoet.

## Gegevens verwijderen

De code voert een "DELETE" opdracht uit. Je gebruikt een parameter om op te geven welk record je wil verwijderen.

### Oefening

* Breid de toepassing met de wachtwoorden-databank uit, zodat een gebruiker ook zijn of haar wachtwoord kan wijzigen

## Opgeslagen procedures uitvoeren

Opgeslagen procedures of stored procedures (bijvoorbeeld in SQL Server) kan je uitvoeren net alsof je een query uitvoert. Je moet alleen de CommandType-property van het SqlCommand-object instellen op StoredProcecure:
Je kan ook parameters toevoegen, net zoals bij een gewone query.