Programmeren in ASP.NET/Databankgegevens wijzigen

Uit Wikibooks
Ga naar: navigatie, zoek

Programmeren in ASP.NET

  1. Wat is ASP.NET?
  2. Wat heb ik nodig voor ASP.NET?
  3. Een ASP.NET-server installeren
  4. Je eerste ASP.NET-pagina
  5. HTML-controls
  6. Foutzoeken
  7. Web-server-controls
  8. Webformulieren
  9. Veelgebruikte objecten
  10. Validering
  11. Master-pagina's
  12. Navigatie
  13. Gegevenstoegang
  14. Werken met databanken
  15. Databankgegevens wijzigen
  16. Werken met datacontrols
  17. GridView
  18. FormView en DetailsView
  19. User-controls
  20. Custom controls
  21. AJAX
  22. Viewstate
  23. Configuratiebestanden
  24. Webservices
  25. Beveiliging
  26. Personalisatie en profielen
  27. Thema's en skins
  28. WebParts
  29. Globalisering
  30. Caching
  31. Mail vanuit ASP.NET
  32. Reguliere expressies
  33. Server-side afbeeldingen
  34. Mobiele toepassingen
  35. Meer informatie
  36. Appendix: foutmeldingen


SQL-opdrachten uitvoeren[bewerken]

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[bewerken]

Deze code voert een "INSERT INTO" opdracht uit:

ASP.NET-code: "INSERT INTO"

Dim strConn As String = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=c:\test.mdb"
Dim cn As new OleDbConnection(strConn)
Dim strSQL As String="INSERT INTO AdresTabel (Naam,Voornaam) VALUES ('Smet','Jan');"
Dim cm As New OleDbCommand(strSQL, cn)
Try
	cn.Open()
	cm.ExecuteNonQuery()
	'Naam werd toegevoegd
Catch ex As Exception
	Trace.Warn(ex.Message)
Finally
	cn.Close()
End Try

Opmerkingen:

  1. 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.
  2. In SQL Server moet de gebruiker het INSERT-recht hebben voor de tabel in kwestie.
  3. 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:
Dim aantal As Integer = cm.ExecuteNonQuery()
If(aantal>0) Then ' het is gelukt

Parameters gebruiken bij het bijwerken[bewerken]

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.

Dim strConn As String = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=c:\test.mdb"
Dim cn As new OleDbConnection(strConn)
Dim strSQL As String = _
      "INSERT INTO AdresTabel (Naam, Voornaam) VALUES (@Naam,@Voornaam);"
Try
	cn.Open()
	Dim cm As New OleDbCommand(strSQL, cn)
	cm.Parameters.AddWithValue("@Naam",Naamvak.Text)
	cm.Parameters.AddWithValue("@Voornaam",Voornaamvak.Text)
	cm.ExecuteNonQuery()
	'Naam werd toegevoegd"
Catch ex As Exception
	Trace.Warn(ex.Message)
Finally
	cn.Close()
End Try

Opmerkingen:

  • In de SQL-streng vervang je de variabelen (de parameters) door woorden die beginnen met een apenstaart:
INSERT INTO AdresTabel (Naam, Voornaam) VALUES (@Naam,@Voornaam);"
  • Je voegt de echte waarden van de parameters toe met de opdrachten:
cm.Parameters.AddWithValue("@Naam",Naamvak.Text)
cm.Parameters.AddWithValue("@Voornaam",Voornaamvak.Text)
  • 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[bewerken]

  1. 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).
  2. Zelfde oefening, maar zet nu het formulier en de verwerking in één enkele (aspx-)pagina.
  3. Maak een formulier om verjaardagen toe te voegen aan een databank met een "verjaarkalender".
  4. Schrijf een script dat alle records van een tabel in Access kopieert naar een gelijkaardige tabel in SQL Server.

Gegevens bijwerken[bewerken]

De code hieronder voert een "UPDATE"-opdracht uit. Merk op dat je ook hier voor de WHERE-clause een parameter gebruikt.

Dim strConn As String = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=c:\test.mdb"
Dim cn As new OleDbConnection(strConn)
Dim strSQL As String="UPDATE AdresTabel Set Naam=@Naam WHERE ID=@ID;"
Dim cm As New OleDbCommand(strSQL, cn)
cm.Parameters.AddWithValue("@Naam",strNieuweNaam)  
cm.Parameters.AddWithValue("@ID",id)
Try
	cn.Open()
	cm.ExecuteNonQuery()
	'Naam werd bijgewerkt
Catch ex As Exception
	Trace.Warn(ex.Message)
Finally
	cn.Close()
End Try

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[bewerken]

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

Dim strConn As String = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=c:\test.mdb"
Dim cn As new OleDbConnection(strConn)
Dim strSQL As String="DELETE FROM AdresTabel WHERE ID=@ID;"
Dim cm As New OleDbCommand(strSQL, cn)
cm.Parameters.AddWithValue("@ID",id)  ' id is de ID van het record dat weg moet
Try
	cn.Open()
	cm.ExecuteNonQuery()
	'record werd verwijderd
Catch ex As Exception
	Trace.Warn(ex.Message)
Finally
	cn.Close()
End Try

Oefening[bewerken]

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

Opgeslagen procedures uitvoeren[bewerken]

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:

Dim strConn As String = "Server=(local);trusted_connection=true;Database=Adressen"
Dim cn As New SqlConnection(strConn)
Try
	cn.Open()
     Dim strSQL As String = "sp_MijnStoredProcedure"
     Dim cm As New SqlCommand(strSQL, cn)
     cm.CommandType = CommandType.StoredProcedure
	cm.ExecuteNonQuery()
	'procedure werd uitgevoerd
Catch ex As Exception
	Trace.Warn(ex.Message)
Finally
	cn.Close()
End Try

Je kan ook parameters toevoegen, net zoals bij een gewone query.

Informatie afkomstig van http://nl.wikibooks.org Wikibooks NL.
Wikibooks NL is onderdeel van de wikimediafoundation.