Programmeren in ASP.NET/Appendix: foutmeldingen
Uiterlijk
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 |
|
|
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 |
|
|
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 |
|
|
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 |
|
|
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. |
|
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. |
|
|
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 |
|
|
Login failed for user 'NT AUTHORITY\ANONYMOUS LOGON'.Login failed for user '\' | Zie https://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, … |
|
Hoewel de foutboodschap SQL Server 2005 vermeldt, kan dit even goed voorkomen bij SQL Server 2000
|
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 |