PROBLEMI SU PULSANTE PER CAMBIARE PAGINA

martedì 09 marzo 2010 - 23.21

mauri1961 Profilo | Senior Member

Ho una pagina dove ho inserito un button per passare su un'altra pagina con l'aggiunta di un campo per poter leggere altri dati.

Ho inserito una sub con questo codice:

Sub accanto(ByVal sender As Object, ByVal e As EventArgs)
Dim conn As New SqlConnection("Data Source=PC-MAURIZIO; Initial Catalog=CASSAWEB;Integrated Security=SSPI")
Dim command As New SqlCommand("select * from web_sinda where sin_codice=' " & Request.QueryString("coditta").ToString() & "'", conn)
conn.Open()
Dim dr1 As SqlDataReader = command.ExecuteReader()
If dr1.Read Then
Session.Add("codope", dr1("sin_codice"))
Response.Redirect("vw-accasin.aspx")
End If
conn.Close()

End Sub


tuttavia lanciando il programma si schianta con questo messaggio:

Riferimento a un oggetto non impostato su un'istanza di oggetto

Sono abbastanza inesperto e non capisco come risolverlo.

Grazie, Maurizio

fguida Profilo | Expert

dr1.Read ...non mancano le parentesi tonde?

Francesco

mauri1961 Profilo | Senior Member

Non funziona, mi dice che il riferimento ad un oggetto non è impostato ad una istanza di oggetto....

Ciao, Maurizio

sankyu Profilo | Senior Member

potrebbe essere che quando chiami la pagina manca la QueryString("coditta"), poi ci sono un sacco di altri problemi:
1-"select * from web_sinda where sin_codice=' " & Request.QueryString("coditta").ToString() & " NON si fa pena attacco tramite sql injection e devastazione del database si corregge cosi
"select * from web_sinda where sin_codice=@codice"
command.parameters.addwithvalue("@codice",Request.QueryString("coditta").ToString())
2- la connessione va chiusa prima di fare response.redirect se no rimane aperta e dopo un po sql server si incazza!!
3-personalmente non mi piace la sintassi inline riscriverei il tutto così

dim cmd as new sqlcommand
cmd.connection=conn
cmd.commandtext="select * from web_sinda where sin_codice=@codice"
cmd.parameters.addwithvalue("@codice",Request.QueryString("coditta").ToString())
dim reader as sqldatareader
cmd.connection.open
reader=cmd.executereader
if reader.hasrow then
reader.read()
session("codope")=reader("sin_codice")
endif
cmd.connection.close
response.redirect("vw-accasin.aspx")

4-la query è inutile!! non ti serve fare un select * se poi utilizzi lo stesso valore del where meglio un select count(*) e vedi se il reader.hasrows =true per sapere se il dato esiste nel db (risparmi memoria)
5-Consiglio: quando ho iniziato pure io avevo i tuoi stessi problemi, fai tanto esercizio prima di andare in produzione se no poi sono zzi Amari
6- qualsiasi cosa posta sul forum appena ho tempo rispondo!

mauri1961 Profilo | Senior Member

Ti ringrazio per i preziosi consigli, effettivamente di mettere nella select @codice ci ero arrivato dopo che avevo postato la richiesta di aiuto, tuttavia pur editando il codice come mi hai segnalato continua a darmi lo stesso errore.

La request.querystring("coditta") la utilizzo nella sub page_load per poter leggere la tabella del database e mandarmi a video i campi desiderati che sono un ulteriore dettaglio di altri visualizzati in una pagina precedente (e tutto questo lo fa correttamente).

Il maligno button che sull' on click attiva la sub "accanto" nelle mie intenzioni doveva aprire una ulteriore pagina che andasse a leggere una tabella diversa ma con lo stesso campo di richiamo.

Mi chiedo se l'errore "RIFERIMENTO A UN OGGETTO NON IMPOSTATO SU UN'ISTANZA DI OGGETTO" non si debba al fatto che la request.querysting non contenga più il valore quando clicco sul pulsante.

Grazie ancora, Maurizio.

p.s. sto scrivendo queste pagine di codice in previsione di un utilizzo futuro per la ditta presso la quale lavoro, quindi mi servono proprio per fare esperienza. Hai perfettamente ragione quando mi consigli di immagazzinare codici su codici, ho vent'anni di esperienza con linguaggi cobol più o meno evoluti e so benissimo quanto sia importante essere padroni del mezzo... sicuramente questi forum sono un aiuto preziosissimo che nei miei primi anni di lavoro non esistevano.


sankyu Profilo | Senior Member

Mi ha incuriosito questo errore puoi postare il codice di entrambe le pagine che vediamo di risolvere

mauri1961 Profilo | Senior Member

Ti ho allegato i codici di tre programmini.

Cerco di spiegarti: il primo (Vw-sinope) mostra una grid-view dalla quale si può selezionare una riga e accedere alla pagina successiva con i dati del record selezionato.

Nel codice VW-dettope si vede il dettaglio completo della tabella riassunta nella gridview della pagina precedente. il dettaglio lo legge grazie alla famosa Request.querystring con una query nella sub page_load
(funziona tutto correttamente).

Il problema sorge quando voglio accedere alla terza pagina (vw-accasin) che è ancora abbozzata e dovrebbe solo mostrare alcuni dati della medesima tabella (tanto per vedere se funziona il passaggio).

E' proprio al cliccare del bottone e del richiamo della sub "accanto" che il codice mi segnala l'errore.

Grazie, Maurizio
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-2017
Running on Windows Server 2008 R2 Standard, SQL Server 2012 & ASP.NET 3.5