Newsgroup: it.comp.lang.visual-basic
Titolo: vb.net parametri query

Ciao a tutti devo passare un parametro ad una query. Il parametro e' 
contenuto nella textbox1 del form1
ho scritto cosi' la mia query:
SELECT     InstructorID, Instructor, PhoneNumber, Extension
FROM         Instructors
WHERE     (InstructorID = forms1form1.textbox1.[text])
Mi da errore perche' non trova nessun parametro per eseguire la query.
Sapete dirmi dove sbaglio? sono neofita di 
vb.net
.
Grazie a tutti

"alex" <aiaiai...@aiaiaiaiaai.jak> ha scritto nel messaggio 
news:4b951a14$0$1105$4faf...@reader4.news.tin.it...

Qui non si tratta di essere neofita di 
vb.net
! Una cosa del genere � 
pazzesca in qualsiasi linguaggio... cos� lasceresti la porta aperta a 
qualsiasi maleintenzionato.
Per iniziare dai uno sguardo a questo link:
http://msdn.microsoft.com/it-it/beginner/bb308760.aspx
Ciao, Vincenzo

 
http://msdn.microsoft.com/it-it/beginner/bb308760.aspx
grazie vincenzo, vado subito a guardare i link.Mi spieghi pero' cosa intenti 
per porta aperta? Nel senso che io questa cosa stavo cercando di farla 
modificando un programma gia' esistente per vedere se potevo modificare la 
query.
Grazie mille per il link !!

"alex" <aiaiai...@aiaiaiaiaai.jak> ha scritto nel messaggio 
news:4b9658f8$0$1129$4faf...@reader3.news.tin.it...

Riprendendo il tuo esempio:
SELECT     InstructorID, Instructor, PhoneNumber, Extension
FROM         Instructors
WHERE     (InstructorID = forms1form1.textbox1.[text])
Se qualcuno con un p� di esperienza intuisce la struttura del DB e/o i nomi 
delle tabelle, potrebbe benissimo scrivere nella tua casella di testo un 
comando SQL come DROP TABLE o DELETE e rovinare il tuo DB.
Questo fenomeno � conosciuto come SQL injection. Prova a cercare su Google e 
vedrai quanta documentazione c'� a riguardo.
Una sintassi corretta potrebbe essere questa:
Dim cn As New 
SqlConnection(ConfigurationManager.ConnectionStrings("DBMain").ConnectionString)
Try
    Dim cm As New SqlCommand("SELECT * FROM Tabella WHERE IDCampo = @ID", 
cn)
    cm.CommandType = Data.CommandType.Text
    cm.Parameters.AddWithValue("@ID", id)
    cn.Open()
    Dim dr As SqlDataReader = cm.ExecuteReader
    Do While dr.Read
        objXXX = FillDataRecord(dr)
    Loop
Catch ex As Exception
    log.Error("GiustificativiDB.GetItem()", ex)
Finally
    cn.Dispose()
End Try
Un'altra cosa... cerca di tenere separata la logica dall'interfaccia grafica 
creandoti delle classi con dei metodi per recuperare i dati dal DB.
Lo so che magari pu� risultare difficile all'inizio ma poi ne trarrai enormi 
benefici.
A tal proposito:
http://imar.spaanjaars.com/QuickDocId.aspx?quickdoc=416
Anche se � per 
ASP.NET
 non fa niente... il concetto � sempre valido! ;-)
In generale il sito � molto valido per prendere spunti... buona lettura.
Ciao, Vincenzo 

 Questo fenomeno � conosciuto come SQL injection.
Non ne ero al corrente, su un programma che avevo fatto con access ho usato 
questo sistema, copiandolo da un corso fatto su un sito.
Grazie mille vincenzo, vado a vedermi l'ennesimo link che mi hai dato.
Ciao

"alex" ha scritto

Il concetto espresso in quattro vignette:
http://xkcd.com/327/
Bye, G. 

 Grazie mille vincenzo, vado a vedermi l'ennesimo link che mi hai dato.
Teniamo presente che se io faccio un programma per un utente, e questo si
mette a cancellare roba, son cavoli suoi (ovviamente utente abilitato a
cancellare la tabella sul DB).
In ambiente web invece � una cosa fondamentale.
Comunque i parametri sono la scelta migliore sicuramente.