lp_maxiMedlem sedan dec. 20049 inlägg
Hallå!
Jag håller på att läsa boken Lär Dig ASP.NET På 3 Veckor
Och nu har kört fast i ett kodexempel.
Fel meddelandet ser ut så här:
Object reference not set to an instance of an object.
Description: An unhandled exception occurred during the execution of the current web request. Please review the stack trace for more information about the error and where it originated in the code.
Exception Details: System.NullReferenceException: Object reference not set to an instance of an object.
Source Error:
Line 155: dgData.DataBind()
Line 156:
Line 157: objReader.Close
Line 158: objCmd.Connection.Close()
Line 159:
Koden är rätt lång. den ligger på 285 Rader.
Men om ni vill ha koden så finns den här.
https://www.aspsidan.se/code/?c=3064
Hoppas någon kan hjälpa mig!
:q :q
DinoMedlem sedan sep. 20011 918 inlägg
141: Dim objReader As [b]New[/b] OleDbDataReader
lp_maxiMedlem sedan dec. 20049 inlägg
Va det allt till svar?
Vad ska jag göra med den kod raden?
Mc FettoMedlem sedan nov. 20021 920 inlägg
lp_maxi skrev:
Va det allt till svar?
Vad ska jag göra med den kod raden?
jämföra dinos kodrad med din egen... :i
lp_maxiMedlem sedan dec. 20049 inlägg
Det hjälpte inte att sätta dit New
JonMedlem sedan juli 20011 126 inlägg
Jag tycker att det känns som om du ska deklarera ditt dgData någonstans. Är inte så hemma på VB.net men typ:
script runat="server">
'Skapa Databas koppling
Dim Conn As New OleDbConnection("Provider=Microsoft.Jet.OLEDB.4.0;" & _
"Data Source=min sökväg som jag inte visar här")
Protected dgData as DataGrid
DinoMedlem sedan sep. 20011 918 inlägg
Då kanske detta är problemet. Ersätt
objReader.Close
med
objReader.Close()
lp_maxiMedlem sedan dec. 20049 inlägg
Går fortfarande in
Det hjälpte inte att sätta objReader.Close()
Jag får fel meddelande ännu.
Men dom inne på aspsidan snackar om att jag ska sätta objReader till Null
typ så här
objReader = Nothing efter jag har stägnt det.
Men det funkar ändå inte.
JonMedlem sedan juli 20011 126 inlägg
Jag tror ändå att din datareader är null och därmed din datasource på diit datagrid.
Anledningen till att datareadern skull ekunna vara null kan vara att din connection inte är rätt. Kolla om din connection är null eller om din datareader är null. Där skulle jag börja :)
GladhMedlem sedan maj 20013 024 inlägg
143: Try
144: objCmd.Connection.Open()
145: objReader = objCmd.ExecuteReader()
146: Catch Ex As Exception
147: lblMessage.Text = "Fel vid hämtning av databasen"
148: End Try
150: dgData.DataSource = objReader
151: If Not EditIndex.Equals(Nothing) Then
152: dgData.EditItemIndex = EditIndex
153: End If
154:
155: dgData.DataBind()
156:
157: objReader.Close
158: objCmd.Connection.Close()
Denna kodsnutt är/kommer att vara en felkälla.
Om du får ett fel i din databas så kommer ditt objReader att vara NULL då den inte kommer få någotvärde, du kommer även gå in i din Catch() kod och skriva ut ett meddelande till lbl. Tyvärr så kommer du fortsätta längre ner i koden med att sätta ditt dgDataGrids datasource till Null (det är inget fel, men är nog inte var du tänkt dig).
Du kommer sedan längre ner i koden att försöka dig på en .Close() method på ett objekt som INTE finns, och det kommer att ge dig ett NullReference fel.
Om du vill behålla din kod så måste du innan du gör din objReader.Close() kontrollera så att objReader != null.
- M
lp_maxiMedlem sedan dec. 20049 inlägg
Mmm men det roliga är att koden är en exakt kopia som i boken och ändå fungerar det inte.
hur får jag objReader till null då?
Det går inte att skriva objReader = Nothing för jag får felmeddelande då med.
GladhMedlem sedan maj 20013 024 inlägg
Mmm men det roliga är att koden är en exakt kopia som i boken och ändå fungerar det inte.
Om det är en EXAKT kopia så förstår jag att det inte fungerar då du GARANTERAT inte har en likadan connectionstring på din dator som det står i koden.
hur får jag objReader till null då?
Du vill INTE ha objReader till Null, det är ju det som är problemet att den är Null. Du vill ha att den skall innehålla en referens till ett objekt.
Du har garanterat problem med någon av följande 2 rader:
144: objCmd.Connection.Open()
145: objReader = objCmd.ExecuteReader()
Så mitt tips till dig blir att se över de raderna genom att sätta en breakpoint på dessa raderna och så stega dig igenom koden för att se vad som blir fel.
- M
lp_maxiMedlem sedan dec. 20049 inlägg
Hur gön breakpoint på dom två raderna då?
GladhMedlem sedan maj 20013 024 inlägg
Hur gön breakpoint på dom två raderna då?
Det är beroende på din utvecklingsmiljö, men för visual stuido så markera man raden trycker F9 och sedan sä köra man sidan i debug läge.
Vilken utvecklingsmiljö har du?
- M
lp_maxiMedlem sedan dec. 20049 inlägg
Jag kodar i dreamWeaver
har inte hittat visual studio.net på dc ännu
GladhMedlem sedan maj 20013 024 inlägg
DreamWeaver vet jag inget om. Även om du inte fått tag I en olaglig kopia av VS.NET så finns det lagliga varianter som du kan använda dig av...
Här finns för VS 2005: http://lab.msdn.microsoft.com/vs2005/
Eller så kan du välja WebMatrix från http://www.asp.net. Vet dock inte om man kan debuga I webmatrix...
Jag kan dock säga dig att utan möjligheten att debuga sig igen sin kod så kan man lika gärna lägga ner utvecklingen helt och hållet. Möjligheten att felsöka och debuga sin kod är mer än halva utvecklingsarbetet.
- M
lp_maxiMedlem sedan dec. 20049 inlägg
Jag ska dra hem vs.net och kolla vad de programet har att säga