Null reference exception su oggetto esistente... [8o]

mercoledì 18 giugno 2008 - 16.13

pozzoli.samuele Profilo | Senior Member

Anzitutto ben ritrovati a tutti...

Aiuto!!! Non ne esco più.

Magari qualche buon'anima c'è cascato prima di me ed ha avuto un'intuizione geniale, ricolutiva del problema.

Facile, no... L'ho fatto MILIARDI di volte. Metto una tabella in una pagina, con la riga con l'intestazione. Leggo un db... Ed aggiungo le righe a seconda di quello che ho nel db.

Dunque. Funziona tutto alla perfezione, ovviamente, sul mio pc di sviluppo. Messo sul server aruba, fila tutto alla grande, finchè non deve inserire la riga nella tabella.

Creo le celle, metto il testo delle celle a seconda del contenuto delle tuple, metto le celle nella riga... tutto ok, fin'ora... Quando cerco di mettere la riga nella tabella, crash. Errore. Attenzione, solo sul server aruba. L'istruzione Tabella.rows.add(riga) mi da un null reference exception.

Ovviamente la riga è inizializzata. Ci ho pure aggiunto tutte le celle, quindi funziona. L'unica cosa che può non essere inizializzata è la tabella. Ma qui sta il barbatrucco! La tabella è messa giù a design time. E' compilata dentro la pagina. C'è... E' un oggetto della pagina!!!



Sigh sob!!! L'ho fatto milioni di volte anche all'interno dello stesso sito! Giuro, funziona! E qui no...

Nessuno ha un'idea, eh?

PS: Scusate il bipost, mi è andato in errore il primo inserimento!!!

dante Profilo | Junior Member

Ciao Samuele,
sicuro che tu abbia tutti i campi e/o nominati bene?
Io ci darei una controllatina

19018 Profilo | Expert

Puoi postare tutto il log dell'eccezione?

ciao
Stefano Passatordi

http://blogs.dotnethell.it/stem/

pozzoli.samuele Profilo | Senior Member

Ecco il risultato della pagina:

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 51: cella3.Controls.Add(link2)
Line 52: riga2Tab.Cells.Add(cella3)
Line 53: MessaggiPubblici.Rows.Add(riga2Tab)
Line 54: Next
Line 55: conn.Close()

Source File: D:\Inetpub\webs\protezionecivileolgiateit\Amministrazione\messaggiPop\Default.aspx.vb Line: 53

La tabella messaggi pubblici, ovviamente, esiste ed è dichiarata nella pagina...

pozzoli.samuele Profilo | Senior Member

>Ciao Samuele,
>sicuro che tu abbia tutti i campi e/o nominati bene?
>Io ci darei una controllatina

La controllatina, ovviamente ce l'ho data!

Inoltre ti è forse sfuggito che nel post segnalavo che sulla macchina di sviluppo il progetto funziona alla perfezione! Se un nome è scritto sbagliato, è scritto sbagliato sulla macchina di produzione, tanto quanto sulla macchina di sviluppo...
E se ti sta frullando una certa idea per la testa... E' vb, quindi non case sensitive. In ogni caso, anche i caratteri maiuscoli, sono al posto giusto. Sia nell'oggetto sulla pagina che nel codice.

Cerco di essere molto pulito almeno su queste cose!



Grazie comunque per il suggerimento!

19018 Profilo | Expert

>Ecco il risultato della pagina:
>
>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 51: cella3.Controls.Add(link2)
>Line 52: riga2Tab.Cells.Add(cella3)
>Line 53: MessaggiPubblici.Rows.Add(riga2Tab)
>Line 54: Next
>Line 55: conn.Close()
>
>Source File: D:\Inetpub\webs\protezionecivileolgiateit\Amministrazione\messaggiPop\Default.aspx.vb
>Line: 53
>
>La tabella messaggi pubblici, ovviamente, esiste ed è dichiarata
>nella pagina...

Tutto è dichiarato ma non tutto può essere istanziato in un dato momento...inserisci del codice per testare quale oggetto è null.

Stefano Passatordi

http://blogs.dotnethell.it/stem/

pozzoli.samuele Profilo | Senior Member

MA... L'evento che lancia queste righe è on load... La tebelle della pagina DEVONO essere istanziate! O sbaglio?

Inoltre, celle e righe, le istanzio io direttamente in creazione degli oggetti!

Protected Sub Page_Load(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Load
'Messaggi Volontari
Dim dati As Data.DataTable = db.getTable("...")
For Each riga1 As Data.DataRow In dati.Rows
Dim riga1Tab As New TableRow
Dim cella1 As New TableCell
cella1.Text = riga1("Titolo")
riga1Tab.Cells.Add(cella1)
... Omissis ...
riga1Tab.Cells.Add(cella3)
MessaggiVolontari.Rows.Add(riga1Tab)
Next
'Messaggi Pubblici
Dim dati2 As Data.DataTable = db.getTable("...")
For Each riga2 As Data.DataRow In dati2.Rows
Dim riga2Tab As New TableRow
Dim cella1 As New TableCell
cella1.Text = riga2("Titolo")
riga2Tab.Cells.Add(cella1)
... Omissis ...
riga2Tab.Cells.Add(cella3)
MessaggiPubblici.Rows.Add(riga2Tab)
Next
conn.Close()
End Sub

E questo è tutto... Non mi pare ci siano cose difficilissime...

19018 Profilo | Expert

>MA... L'evento che lancia queste righe è on load... La tebelle
>della pagina DEVONO essere istanziate! O sbaglio?
>
>Inoltre, celle e righe, le istanzio io direttamente in creazione
>degli oggetti!
>
>Protected Sub Page_Load(ByVal sender As Object, ByVal e As System.EventArgs)
>Handles Me.Load
> 'Messaggi Volontari
> Dim dati As Data.DataTable = db.getTable("...")
> For Each riga1 As Data.DataRow In dati.Rows
> Dim riga1Tab As New TableRow
> Dim cella1 As New TableCell
> cella1.Text = riga1("Titolo")
> riga1Tab.Cells.Add(cella1)
> ... Omissis ...
> riga1Tab.Cells.Add(cella3)
> MessaggiVolontari.Rows.Add(riga1Tab)
> Next
> 'Messaggi Pubblici
> Dim dati2 As Data.DataTable = db.getTable("...")
> For Each riga2 As Data.DataRow In dati2.Rows
> Dim riga2Tab As New TableRow
> Dim cella1 As New TableCell
> cella1.Text = riga2("Titolo")
> riga2Tab.Cells.Add(cella1)
> ... Omissis ...
> riga2Tab.Cells.Add(cella3)

DOVE ISTANZI CELLA3 ????

> MessaggiPubblici.Rows.Add(riga2Tab)
> Next
> conn.Close()
> End Sub
>
>E questo è tutto... Non mi pare ci siano cose difficilissime...
>

Stefano Passatordi

http://blogs.dotnethell.it/stem/

pozzoli.samuele Profilo | Senior Member

Nel pezzo omissis, ci sono dichiarate 2 celle ed aggiunte alle righe... Esattamente come per cella1.

Praticamente viene fuori il titolo e 2 link, uno per modificare ed uno per liminare...

Il codice è identico, solo le ho tolte per evitare di pubblicare i link su internet, è un settore amministrativo del sito, quello dove riscontro l'errore. Sono pagine protette, ma onde prevenire attacchi dovuti ad una disattenzione...

19018 Profilo | Expert

Sicuro che db.getTable("...") restitusce qualcosa?

Devi testare ogni singolo oggetto e controllare quale è null.

ciao
Stefano Passatordi

http://blogs.dotnethell.it/stem/

pozzoli.samuele Profilo | Senior Member

Si, sicuro! Ho 2 sistemi di controllo.

Il primo è il for each che se non ci son righe, semplicemente non esegue il ciclo. Testato...

Il secondo, è quando assegno il valore alle celle... O almeno... Se l'errore fosse per questo dovrebbe andare in errore in quel punto, non quando metto l riga nella tabella, sbaglio?

19018 Profilo | Expert

Ti ho detto come fare, testare ogni oggetto.
Fai scrivere su un file di log lo stato di ogni singolo oggetto che usi.
Per qualche motivo, sul server aruba qualche oggetto non viene istanziato..e devi capire quale altrimenti così non andrai molto lontano, è un problema che non si riscontra in locale e quindi non è facile individuarlo.

ciao
Stefano Passatordi

http://blogs.dotnethell.it/stem/
Partecipa anche tu! Registrati!
Hai bisogno di aiuto ?
Perchè non ti registri subito?

Dopo esserti registrato potrai chiedere
aiuto sul nostro Forum oppure aiutare gli altri

Consulta le Stanze disponibili.

Registrati ora !
Copyright © dotNetHell.it 2002-2024
Running on Windows Server 2008 R2 Standard, SQL Server 2012 & ASP.NET 3.5