Home Page
Articoli
Tips & Tricks
News
Forum
Archivio Forum
Blogs
Sondaggi
Rss
Video
Utenti
Chi Siamo
Contattaci
Username:
Password:
Login
Registrati ora!
Recupera Password
Home Page
Stanze Forum
ASP.NET 2.0 / 3.5 / 4.0
Strano errore con querystring...
domenica 14 novembre 2010 - 23.02
Elenco Threads
Stanze Forum
Aggiungi ai Preferiti
Cerca nel forum
mauri1961
Profilo
| Senior Member
218
messaggi | Data Invio:
dom 14 nov 2010 - 23:02
Ripropongo un problema occorsomi alcuni giorni or sono che non sono ancora riuscito a risolvere.
Ho una gridview dalla quale seleziono righe che devono aprire una pagina nuova e mostrarmi il dettaglio di tali dati con la possibilità di modificarli.
Ho utilizzato dalla grid view due campi che nella nuova pagina passo attraverso request.querystring.
I campi arrivano correttamente e si visualizzano infatti nella nuova pagina. Ma il resto dei dati non si vedono.
Per controprova ho aggiunto una detail view con tutti i dati che si vede perfettamente passando i due campi
mostro ora il codice "incriminato".
Sub Page_Load(ByVal sender As Object, ByVal e As EventArgs)
ubicazione.Text = Request.QueryString("LKOPERA")
committente.Text = Request.QueryString("lkcomm")
operazione.Text = "MODIFICA"
Dim conn As New SqlConnection("Data Source=DELL-PORTATILE; Initial Catalog=NOTIFICHE;Integrated Security=SSPI")
Dim command As New SqlCommand("select * from notifiche_01 where not_opera=' " & Request.QueryString("lkopera").ToString() & "' and not_committente=' " & Request.QueryString("lkcomm").ToString() & "'", conn)
conn.Open()
Dim dr1 As SqlDataReader = command.ExecuteReader()
If dr1.Read Then
comunica.SelectedDate = dr1("not_comunicazione").date
ubicazione.Text = dr1("not_opera").ToString
indirizzo.Text = dr1("not_indirizzo").ToString
comune.SelectedValue = dr1("not_localita").ToString
committente.Text = dr1("not_committente").ToString
comm_cf.Text = dr1("not_comm_cf").ToString
responsabile.Text = dr1("not_responsabile").ToString
resp_cf.Text = dr1("not_resp_cf").ToString
coordinatore.Text = dr1("not_coord1").ToString
coord_cf.Text = dr1("not_cor1_cf").ToString
comm_cf.Text = dr1("not_comm_cf").ToString
dataini.Text = dr1("not_inizio").date
datafin.Text = dr1("not_fine").date
impresa.SelectedValue = dr1("not_impresa").ToString
impresanoniscritta.Text = dr1("not_impresa_noniscritta").ToString
comunesede.Text = dr1("not_comune").ToString
partitaiva.Text = dr1("not_impr_cf").ToString
importo.Text = CDec(dr1("not_importo"))
Label22.Text = comunica.SelectedDate.ToShortDateString
End If
conn.Close()
come dicevo questi campi:
ubicazione.Text = Request.QueryString("LKOPERA")
committente.Text = Request.QueryString("lkcomm")
operazione.Text = "MODIFICA"
si vedono, mentre quelli risultanti dalla select no.
Inserendo una detailview questa si vede perfettamente (la select è la medesima..)
<asp:DetailsView ID="DetailsView1" runat="server" AutoGenerateRows="False"
DataSourceID="SqlDataSource3" Height="50px" Width="125px">
<Fields>
<asp:BoundField DataField="not_comunicazione" HeaderText="not_comunicazione"
SortExpression="not_comunicazione" />
<asp:BoundField DataField="not_opera" HeaderText="not_opera"
SortExpression="not_opera" />
<asp:BoundField DataField="not_indirizzo" HeaderText="not_indirizzo"
SortExpression="not_indirizzo" />
<asp:BoundField DataField="not_localita" HeaderText="not_localita"
SortExpression="not_localita" />
<asp:BoundField DataField="not_committente" HeaderText="not_committente"
SortExpression="not_committente" />
<asp:BoundField DataField="not_comm_cf" HeaderText="not_comm_cf"
SortExpression="not_comm_cf" />
<asp:BoundField DataField="not_responsabile" HeaderText="not_responsabile"
SortExpression="not_responsabile" />
<asp:BoundField DataField="not_resp_cf" HeaderText="not_resp_cf"
SortExpression="not_resp_cf" />
<asp:BoundField DataField="not_coord1" HeaderText="not_coord1"
SortExpression="not_coord1" />
<asp:BoundField DataField="not_cor1_cf" HeaderText="not_cor1_cf"
SortExpression="not_cor1_cf" />
<asp:BoundField DataField="not_inizio" HeaderText="not_inizio"
SortExpression="not_inizio" />
<asp:BoundField DataField="not_fine" HeaderText="not_fine"
SortExpression="not_fine" />
<asp:BoundField DataField="not_impresa" HeaderText="not_impresa"
SortExpression="not_impresa" />
<asp:BoundField DataField="not_impresa_noniscritta"
HeaderText="not_impresa_noniscritta" SortExpression="not_impresa_noniscritta" />
<asp:BoundField DataField="not_impr_cf" HeaderText="not_impr_cf"
SortExpression="not_impr_cf" />
<asp:BoundField DataField="not_comune" HeaderText="not_comune"
SortExpression="not_comune" />
<asp:BoundField DataField="not_importo" HeaderText="not_importo"
SortExpression="not_importo" />
</Fields>
</asp:DetailsView>
<asp:SqlDataSource ID="SqlDataSource3" runat="server"
ConnectionString="<%$ ConnectionStrings:NOTIFICHEConnectionString %>"
SelectCommand="SELECT * FROM [notifiche_01] WHERE (([not_committente] = @not_committente) AND ([not_opera] = @not_opera))">
<SelectParameters>
<asp:QueryStringParameter Name="not_committente" QueryStringField="LKCOMM"
Type="String" />
<asp:QueryStringParameter Name="not_opera" QueryStringField="LKOPERA"
Type="String" />
</SelectParameters>
</asp:SqlDataSource>
sicuramente sbaglio qualcosa...ma va a capire cosa...
grazie, Maurizio
sankyu
Profilo
| Senior Member
266
messaggi | Data Invio:
mar 16 nov 2010 - 00:56
prova con i parametri
Dim command As New SqlCommand("select * from notifiche_01 where not_opera='@par1' and not_committente='@par2' ", conn)
command.parameters.addwithvalue("@par1", Request.QueryString("lkopera").ToString() )
command.parameters.addwithvalue("@par2", Request.QueryString("lkcomm").ToString() )
Ricorda che non devi mai mettere le clausole where con dati che arrivano da query string o comunque campi modificabili dall'utente senza parametri se no ti becchi una bella sql injection e ti salta tutto il db !!!! OCCHIO!!!
ps ho scritto senza VS ed intellisense può essere che la sintassi non sia completamente esatta!!
Consulente e Sviluppatore .net in ambito finanziario
Dai un occhio al mio blog potrebbe tornarti utile
http://dotnetmemo.blogspot.com
mauri1961
Profilo
| Senior Member
218
messaggi | Data Invio:
mar 16 nov 2010 - 09:38
Ti ringrazio innanzitutto per il prezioso suggerimento che ho immediatamente adottato (la sintassi era corretta), tuttavia continuo a non visualizzare i dati nei campi textbox, mentre la details view mostra tutti i dati.
E' possibile che ci sia qualcosa di errato nella definizione del comando execute.reader?
dim dr1 as sqldatareader = command.executereader()
if dr1.read then()
indirizzo.text = dr1("not_indirizzo").tostring
...seguono gli altri campi....
grazie, Maurizio
sankyu
Profilo
| Senior Member
266
messaggi | Data Invio:
mar 16 nov 2010 - 11:06
l'unico dubbio che ho è che nel momento in cui fai
if dr.read il risultato sia false (praticamente ti restituisce false se non ci sono dati ) e quindi non legga
per il resto la sintassi mi sembra corretta anche se di solito tengo separati dichiarazione da assegnamento per rendere il codice più leggibile
ex:
dim dr as sqldatareader
dr = command.executereader()
while dr.read
txt.text=dr("Posizione").toString
end While
Fai Così togli il if dr.read e metti dr.read e basta e vedi cosa fa in teoria dovrebbe dare errore per assenza di dati
Consulente e Sviluppatore .net in ambito finanziario
Dai un occhio al mio blog potrebbe tornarti utile
http://dotnetmemo.blogspot.com
mauri1961
Profilo
| Senior Member
218
messaggi | Data Invio:
mar 16 nov 2010 - 12:01
hai ragione !, levando la condizione if mi segnala errore con la causale di assenza dati.....
Ho anche modificato il codice utilizzando la while ma nulla di invariato rispetto a prima.
Come è possibile che non intercetti i dati (penso dalla select...) quando nella details view con la stessa select nella stessa pagina funziona?
select in page_load
Dim command As New SqlCommand("select * from notifiche_01 where not_committente='@par2' and not_opera='@par1'", conn)
command.Parameters.AddWithValue("@par1", Request.QueryString("lkopera").ToString())
command.Parameters.AddWithValue("@par2", Request.QueryString("lkcomm").ToString())
select in details view
<asp:SqlDataSource ID="SqlDataSource3" runat="server"
ConnectionString="<%$ ConnectionStrings:NOTIFICHEConnectionString %>"
SelectCommand="SELECT * FROM [notifiche_01] WHERE (([not_committente] = @not_committente) AND ([not_opera] = @not_opera))">
<SelectParameters>
<asp:QueryStringParameter Name="not_committente" QueryStringField="LKCOMM"
Type="String" />
<asp:QueryStringParameter Name="not_opera" QueryStringField="LKOPERA"
Type="String" />
</SelectParameters>
...mi spiace di farti perdere tempo...
grazie, Maurizio
sankyu
Profilo
| Senior Member
266
messaggi | Data Invio:
mar 16 nov 2010 - 12:18
non ti preoccupare non ho molto da fare ultimamente!!
Comunque secondo me è una questione di spazi che finiscono nella query string
prova ad eseguire il reader senza parametri di tipo variabile ma mettendo il valore direttamente
Esempio
Dim command As New SqlCommand("select * from notifiche_01 where not_committente='@par2' and not_opera='@par1'", conn)
command.Parameters.AddWithValue("@par1", "Valore1")
command.Parameters.AddWithValue("@par2", "Valore2")
e vedi se va se anche così non va prova a fare così e vedi se va
Dim command As New SqlCommand("select * from notifiche_01 where not_committente='Valore1' and not_opera='Valore2", conn)
Consulente e Sviluppatore .net in ambito finanziario
Dai un occhio al mio blog potrebbe tornarti utile
http://dotnetmemo.blogspot.com
mauri1961
Profilo
| Senior Member
218
messaggi | Data Invio:
mar 16 nov 2010 - 13:48
anche in questo caso nulla da fare...
ciao, Maurizio
PEPE
Profilo
| Senior Member
296
messaggi | Data Invio:
mer 17 nov 2010 - 01:46
Sinceramente non ho mai messo i parametri tra apici :D.
Saluti,
Luca.
sankyu
Profilo
| Senior Member
266
messaggi | Data Invio:
mer 17 nov 2010 - 09:26
se sono di tipo stringa li devi mettere tra gli apici voglio vederti a fare una
select * from disney where nomepersonaggio=topolino
oppure
select * from disney where nomepersonaggio='topolino'
Consulente e Sviluppatore .net in ambito finanziario
Dai un occhio al mio blog potrebbe tornarti utile
http://dotnetmemo.blogspot.com
mauri1961
Profilo
| Senior Member
218
messaggi | Data Invio:
mer 17 nov 2010 - 10:54
fino a domani mattina non posso fare nulla in quanto sono scollegato dal server, comunque nella prova gli apici li avevo messi.
Non sarà che il problema sia la definizione del campo della tabella sql ? nvarchar(50)...
Ciao, Maurizio
PEPE
Profilo
| Senior Member
296
messaggi | Data Invio:
mer 17 nov 2010 - 11:31
Scusami sankyu,
io ho semplicemente scritto i parametri perche nella query che hai postato li hai messi tra apici
---------------------
Dim command As New SqlCommand("select * from notifiche_01 where not_committente='@par2' and not_opera='@par1'", conn)
---------------------
@par2 e @par1 dato che sono due parametri non vanno inseriti nelle apici perche senno li prende come testo e non come parametro, altrimenti come si fa a distinguere i due casi?
Tutti qui,
saluti,
Luca.
sankyu
Profilo
| Senior Member
266
messaggi | Data Invio:
mer 17 nov 2010 - 15:48
scusate!! ha ragione pepe è una mia svista
i parametri con @ non vanno tra apici!!! riprova senza apici!!
Grazie pepe
Consulente e Sviluppatore .net in ambito finanziario
Dai un occhio al mio blog potrebbe tornarti utile
http://dotnetmemo.blogspot.com
mauri1961
Profilo
| Senior Member
218
messaggi | Data Invio:
gio 18 nov 2010 - 11:46
ora funziona !!!!!
quindi tirando le somme è fondamentale parametrizzare le querystring in quanto oltre che rendere più sicuro eventuali accessi mariuoli evita di perdere giornate a cercare di capire come mai non funziona la select...
GRAZIE !!!!
...ALLA PROSSIMA...
Torna su
Stanze Forum
Elenco Threads
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 !