Ho questo codicePrevenire SQL Injection in ASP.Net
UPDATE OPENQUERY (db,'SELECT * FROM table WHERE ref = ''"+ Ref +"'' AND bookno = ''"+ Session("number") +"'' ')
Come dovrei evitare che l'iniezione SQL su questo?
UPDATE
Ecco quello che sto cercando
SqlCommand cmd = new SqlCommand("Select * from Table where [email protected]", con);
cmd.Parameters.AddWithValue("@ref", 34);
Per qualche ragione tutto quello che provo e aggiungo che non sembra funzionare continuo a ricevere SQL Command
di seguito indicate.
L'errore è questo
'SqlCommand' is a type and cannot be used as an expression
sto prendendo più di qualcun altro lavoro quindi questo è tutto nuovo per me e vorrei fare le cose nel modo giusto quindi se qualcuno può fornire più aiuto su come fare la mia domanda sopra al sicuro da iniezioni SQL, quindi si prega di fare.
UPDATE NO 2
ho aggiunto nel codice come detto VasilP come questo
Dim dbQuery As [String] = "SELECT * FROM table WHERE ref = '" & Tools.SQLSafeString(Ref) & "' AND bookno = '" & Tools.SQLSafeString(Session("number")) & "'"
ma ottengo un errore di Tools is not declared
ho bisogno per specificare un determinato spazio dei nomi per farlo funzionare?
UPDATE
Chiunque ha ottenuto delle idee sul migliore di ottenere la mia domanda al sicuro da SQL injection, senza gli errori che sto vivendo?
UPDATE
ora ho esso in modo da funzionare senza i parametri bit Ecco il mio codice sorgente aggiornato idea del perché non aggiungerà il valore del parametro?
Dim conn As SqlConnection = New SqlConnection("server='server1'; user id='w'; password='w'; database='w'; pooling='false'")
conn.Open()
Dim query As New SqlCommand("Select * from openquery (db, 'Select * from table where investor = @investor ') ", conn)
query.Parameters.AddWithValue("@investor", 69836)
dgBookings.DataSource = query.ExecuteReader
dgBookings.DataBind()
funziona così
Dim conn As SqlConnection = New SqlConnection("server='server1'; user id='w'; password='w'; database='w'; pooling='false'")
conn.Open()
Dim query As New SqlCommand("Select * from openquery (db, 'Select * from table where investor = 69836') ", conn)
dgBookings.DataSource = query.ExecuteReader
dgBookings.DataBind()
l'errore che sto ottenendo è questo
An error occurred while preparing a query for execution against OLE DB provider 'MSDASQL'.
Ed è perché non va a sostituire il @investor
con l'69836
Qualche idea?
SOLUZIONE
Ecco come ho risolto il mio problema
Dim conn As SqlConnection = New SqlConnection("server='h'; user id='w'; password='w'; database='w'; pooling='false'")
conn.Open()
Dim query As New SqlCommand("DECLARE @investor varchar(10), @sql varchar(1000) Select @investor = 69836 select @sql = 'SELECT * FROM OPENQUERY(db,''SELECT * FROM table WHERE investor = ''''' + @investor + ''''''')' EXEC(@sql)", conn)
dgBookings.DataSource = query.ExecuteReader
dgBookings.DataBind()
Adesso posso scrivere query senza la preoccupazione di SQL injection
mi sembra di essere sempre gli errori quando si cerca di mettere tutto questo nella mia pagina –
@Jamie Taylor ... avrà bisogno di un po 'più in dettaglio di "Mi sembra di essere sempre gli errori ..." in-fine di aiutare sei fuori. –
Continua a ricevere ''SqlCommand' è un tipo e non può essere usato come espressione' –