Programmeren in ASP.NET/Appendix: foutmeldingen

Uit Wikibooks
Naar navigatie springen Jump to search

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


Hieronder vind je een lijst met de meest voorkomende foutberichten in ASP.NET, wat de oorzaak is, en wat je eraan kan verhelpen.

Compileerfouten[bewerken]

Foutboodschap Oorzaak Oplossing
OleDbConnection is not defined Je vergat de imports
<%@ Import NameSpace="System.Data" %>  
<%@ Import NameSpace="System.Data.OleDb" %> 

toe te voegen.

Voeg deze imports toe bovenaan in de aspx-pagina.
Reference to a non-shared member requires an object reference Je gebruikt de naam van een object als een variabele. Dit kan gebeuren als je per ongeluk TextBox schrijft in plaats van TextBox1. Gebruik geen namen van objecten als ID.
Unrecognized configuration section "connectionstrings" De site draait in ASP.NET 1.x, maar de code vereist 2.0 Verander de versie van ASP.NET (in IIS)
Name "x" is not declared
  1. Je verwijst naar een variabele of object welke niet gedeclareerd werd
  2. Je probeert een control te gebruiken in je code, maar de control heeft niet het runat="server"-attribuut
  3. Je probeert een control te gebruiken in code die niet in een subroutine of functie staat
  1. Declareer de variabele of het object met Dim
  2. Voeg het runat="server" attribuut toe
  3. Zet je code binnen een Sub-blok, bijvoorbeeld Page_Load()

Gewone runtimefouten[bewerken]

Foutboodschap Oorzaak Oplossing
Server cannot access application directory De gebruiker ASPNET heeft geen toegang tot de folder waar je bestanden staan. Dit kan gebeuren als je bestanden bijvoorbeeld ergens binnen “My Documents” staan. Geef toegang door rechts te klikken op de folder, ga naar Properties, dan Security, en voeg ASPNET toe. Geef minimum leesrecht aan deze gebruiker.
Object reference not set to an instance of an object.

De objectverwijzing is niet op een exemplaar van een object ingesteld.

Je verwijst naar een object dat wel gedeclareerd werd, maar nog niet aangemaakt werd met New()

bijvoorbeeld:

Dim cm As OleDbCommand
cm.ExecuteReader()

→ cm is nog niet aangemaakt

Maak het object aan met New() of geef het een waarde
Object variable or With block variable not set. Je vraagt een property of methode van een object dat niet bestaat, bijvoorbeeld:
Page.Controls(10).ID
als er minder dan 11 controls op de pagina staan, dan bestaat Controls(10) niet.
Verbeter je code, zodat ze het juiste object gebruikt.
Specified cast is not valid Je probeert een object van één type om te zetten in een object van een ander type, en de omzetting is niet mogelijk. Bijvoorbeeld:
Dim tb As TextBox = Panel1.Controls(0) 

Dit mislukt als Panel1.Controls(0) bijvoorbeeld een Label is, en geen tekstbox. Je kan geen label casten naar een tekstbox.

Zorg ervoor dat het object dat je probeert te casten van het juiste type is.
Array bounds cannot appear in type specifiers Je schreef een van de volgende opdrachten:
Dim a As type()
Dim a As type(param1)

Vermoedelijk vergat je het sleutelwoord New

Schrijf:
Dim a As New type() 
Dim a As New type(param1) 
Access denied to 'c:\inetpub\wwwroot' directory. Failed to start monitoring directory changes
  1. ASP.NET werkt onder een aparte ASPNET-useraccount (ter beveiliging met weinig rechten). Deze account moet leesrechten hebben op de map waarin het ASP.NET-bestand staat dat je wil uitvoeren, of toch tenminste op het web.config-bestand en op de bin-folder.
  2. Een van de folders in het pad bestaat uit meer dan 8 letters
  1. Je kunt dit aanpassen via de eigenschappen van de map en de bestanden. Zie http://www.asp.net/security.aspx voor meer informatie.
  2. Hernoem de folders zodat elke folder maximaal 8 letters bevat
It is an error to use a section registered as allowDefinition='MachineToApplication' beyond application level. Je maakte een bepaalde instelling (zoals "Authentication") in web.config, maar deze instelling mag alleen in web.config van de root gemaakt worden. Maak de instelling alleen in het bestand web.config dat in de root staat

Runtime fouten met databanken algemeen[bewerken]

Foutboodschap Oorzaak Oplossing
No value given for one or more required parameters
  1. Je hebt de naam van een veld fout getypt, of je hebt je van naam vergist. Dit komt doordat elke naam in de SQL-streng die niet gekend is in de databank wordt beschouwd als een parameter.
  2. Voor elk ? of @veldnaam in de SQL-streng moet er een cm.Parameters.AddWithValue() staan.
  1. Verbeter de SQL-opdracht
  2. Voeg de nodige parameters toe aan het Command-object
The number of query values and destination fields are not the same Bij een INSERT- of UPDATE-SQL-opdracht heb je meer of minder parameters geschreven (met ?) dan velden Verbeter de SQL-opdracht
Data type mismatch in criteria expression. Er is een fout in de INSERT-, UPDATE-, DELETE- of SELECT-opdracht. Verbeter de SQL-opdracht
Syntax error in INSERT INTO statement
  1. typfout in het INSERT-commando
  2. één van de veldnamen is een gereserveerd woord, zoals Date, Time, Begin, enz...
  1. Verbeter de SQL opdracht
  2. Verander de veldnaam in de databank, of zet de veldnaam tussen vierkante haken.
No data exists for the row/column. De datareader bevat geen gegevens. Je probeert gegevens van een datareader op te vragen, maar je vergat dr.Read() of dr.Read() was False.
  1. Roep eerst dr.Read() aan
  2. Controleer of dr.Read() als resultaat True teruggaf.
Format of the initialization string does not conform to specification starting at index 0 Er staat een fout in de connectiestring Schrijf een juiste connectiestring.
AllowCustomPaging must be true and VirtualItemCount must be set for a DataGrid with ID x when AllowPaging is set to true and the selected datasource does not implement ICollection' Paging werkt niet bij een DataGrid als de datasource een DataReader is. Gebruik een DataSet in plaats van een DataReader voor databinding. Je kan ook "custom paging" gebruiken, zoals de foutboodschap aanraadt, maar dat is veel moeilijker.
Een keuzelijst of dropdownlijst verschijnt met "System.Data.Comm.DbDataRecord Error" Je vergat de DataTextField-property van de lijst in te stellen. Stel DataTextField in op een veld uit de data source.
Parameter ?_n has no default value De ne parameter (van een OleDbCommand of SqlCommand) kreeg de waarde "Nothing" Zorg ervoor dat de parameter een geldige waarde krijgt.
Multiple-step OLE DB operation generated errors. Check each OLE DB status value, if available. No work was done. Je schreef iets als:
cm.Parameters.AddWithValue("kolom",TextBox1)
Verander het in:
cm.Parameters.AddWithValue("kolom",TextBox1.Text)
DataBinding: 'System.Data.DataRowView' does not contain a property with the name 'x'. Je hebt een datacontrol die het veld 'x' moet tonen (via databinding), maar het veld zit niet in de SELECT-opdracht. Zorg ervoor dat de SELECT-opdracht het veld 'x' bevat.

Runtime fouten met Access[bewerken]

Foutboodschap Oorzaak Oplossing
The Microsoft Jet database engine cannot open the file x.mdb. It is already opened exclusively by another user, or you need permission to view its data.
De Microsoft Jet-database-engine kan het bestand x.mdb niet openen. Het is exclusief geopend door een andere gebruiker of u hebt een machtiging nodig om de gegevens te kunnen bekijken.
  1. De databank is open in Access. De zogenaamde "another user" ben jij waarschijnlijk zelf.
  2. De databank werd tijdens een vorige poging geopend, maar niet gesloten (doordat het programma halfweg stopte)
  3. De applicatie heeft niet het recht om de databank te openen
  1. Sluit de databank (of tenminste de tabel of query) in Access.
  2. Meestal zit er niets anders op dan de pc te herstarten. Voorkom dit probleem door de connectie te sluiten in een Finally blok
  3. Geef de applicatie leesrecht op het access mdb-bestand.
Operation must use an updateable query
De bewerking moet worden uitgevoerd op een query die kan worden bijgewerkt.
Could not delete from specified tables
De databank is read-only voor ASP.NET. Geef de applicatie schrijf-recht op het access mdb-bestand. Meestal moet de gebruiker ASPNET (of de gebruiker NETWORK SERVICE op Windows 2003) schrijfrecht geven.Tip: maak een aparte folder voor de databank, en geef schrijfrecht op deze folder. Dan werkt het ook als je de databank kopieert. Gebruik de folder app_data in ASP.NET 2.0
Could not find installable ISAM Er staat een fout in de OLEDB-connectiestreng, bv "DataSource" i.p.v. "Data Source". Controleer de connectiestreng.
IErrorInfo.GetDescription failed with E_FAIL(0x80004005) Je gebruikte een gereserveerd woord voor de naam van een veld in je tabel (zoals "Begin", "Start", "End", "Language", "Zone", "Action", "Position", "Date" of "Time") Geef een andere naam, of zet de naam tussen vierkante haken [ ] in de SQL-opdracht.
You tried to assign the Null value to a variable that is not a Variant data type Je probeert een null-waarde toe te voegen in een veld waar dit niet mag. Indien dit voorkomt tijdens een INSERT-operatie op een Access-databank met een datacontrol, staat er waarschijnlijk een AutoNumber-veld in de INSERT-opdracht, bv INSERT INTO tbl (ID,Naam) VALUES (@ID,@Naam) Verwijder het AutoNumber-veld uit de INSERT-opdracht. Verwijder ook de overeenkomstige parameter.

Runtime fouten met SQL Server[bewerken]

Foutboodschap Oorzaak Oplossing
SQL Server does not exist or access denied
  1. De naam van de server is niet juist
  2. De server is gestopt
  3. Je hebt geen toegang
  1. Geef de juiste servernaam
  2. Start de server
  3. Stel de beveiliging juist in
Login failed for user 'NT AUTHORITY\ANONYMOUS LOGON'.Login failed for user '\' Zie http://support.microsoft.com/?id=247931 Stel de beveiliging juist in
Login failed for user 'NT AUTHORITY\NETWORK SERVICE'. De gebruiker heeft geen toegang tot SQL Server Voeg de groep IIS_WPG toe als login voor de SQL Server-instantie
An error has occurred while establishing a connection to the server. When connecting to SQL Server 2005, …
  1. De naam van de server is niet juist
  2. De server is gestopt
  3. Je hebt geen toegang
Hoewel de foutboodschap SQL Server 2005 vermeldt, kan dit even goed voorkomen bij SQL Server 2000
  1. Geef de juiste servernaam
  2. Start de server
  3. Stel de beveiliging juist in
Unable to open the physical file "C:\Inetpub\website\App_Data\aspnetdb.mdf". De gebruiker ASPNET heeft geen toegang tot de folder App_Data Wijzig de beveiliging van de folder App_Data


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