2009-03-11 11 views

risposta

31

Si deve usare un parametro come in:

SQLiteCommand cmd = _connection.CreateCommand(); 
cmd.CommandType = CommandType.Text; 
cmd.CommandText = "SELECT * FROM MyTable WHERE MyColumn = @parameter"; 
cmd.Parameters.Add(new SQLiteParameter("@parameter", textfield)); 
SQLiteDataReader reader = cmd.ExecuteReader(); 

Utilizzando uno SQL parametrizzato sfuggirà tutti i valori di ingresso e di contribuire a proteggere da attacchi di SQL injection.

+0

cosa devo fare se ho più params? Scrivo cmd.CommandText =" INSERT ... @parameter ... @parameter "; cmd.Parameters.Add (...); cmd.Parameters.Add (...);? –

+0

Sì, dovrebbe essere disponibile anche un metodo AddRange in cui è possibile passare una matrice di params che corrispondono ai parametri nel set di dati sql –

+0

Puoi chiamare Parametri.Aggiungere più volte come richiesto o usare Parameters.AddRange che accetta un array di parametri – bstoney

0

È anche possibile sostituire tutti i delimitatori singoli citazione con il dubbio apici (non ").

sql = sql.Replace("'","''"); 
+2

Questo metodo non è ri lodato, può portare a strani bug. – Palani

+0

Non necessariamente. Se costruisci il tuo SQL e fai sostituire l'ultimo passaggio, tutto dovrebbe essere buono. Ha lavorato per anni senza problemi. Ora utilizzo i blocchi delle applicazioni, quindi non importa. :) – klkitchens

+0

questo metodo è buono se è necessario creare un SQL sicuro per eseguire il dump su un file di testo o altro. –