Utilizzare l'SQL parametrizzato.
Esempi
sostituire il vostro concatenazioni di stringhe con @...
segnaposto e, successivamente, aggiungere i valori al vostro SqlCommand. Puoi scegliere liberamente il nome dei segnaposto, ma assicurati che inizi con il segno @
. Il vostro esempio sarà simile a questa:
var sql = "INSERT INTO myTable (myField1, myField2) " +
"VALUES (@someValue, @someOtherValue);";
using (var cmd = new SqlCommand(sql, myDbConnection))
{
cmd.Parameters.AddWithValue("@someValue", someVariable);
cmd.Parameters.AddWithValue("@someOtherValue", someTextBox.Text);
cmd.ExecuteNonQuery();
}
Lo stesso modello viene utilizzato per altri tipi di istruzioni SQL:
var sql = "UPDATE myTable SET myField1 = @newValue WHERE myField2 = @someValue;";
// see above, same as INSERT
o
var sql = "SELECT myField1, myField2 FROM myTable WHERE myField3 = @someValue;";
using (var cmd = new SqlCommand(sql, myDbConnection))
{
cmd.Parameters.AddWithValue("@someValue", someVariable);
using (var reader = cmd.ExecuteReader())
{
...
}
// Alternatively: object result = cmd.ExecuteScalar();
// if you are only interested in one value of one row.
}
Una parola di cautela: AddWithValue
è una buona punto di partenza e funziona bene nella maggior parte dei casi. Tuttavia, è necessario che il valore che si trasmette corrisponda esattamente al tipo di dati del campo del database corrispondente. In caso contrario, si potrebbe finire in una situazione in cui la conversione impedisce la query da using an index. Si noti che alcuni tipi di dati di SQL Server, come char/varchar (senza precedente "n") o data, non hanno un tipo di dati .NET corrispondente. In questi casi, Add
with the correct data type should be used instead.
Perché dovrei farlo?
Altre librerie di accesso ai database
Nota: Questa domanda è da intendersi come una domanda canonica per le persone che non possono ottenere i loro SQLs stringa-concatenato al lavoro. [Se vuoi discuterne, ecco la meta domanda corrispondente.] (Http://meta.stackoverflow.com/q/315913/87698) – Heinzi
Se desideri uno sguardo più approfondito su cosa sia "SQL Injection" e perché è pericoloso vedere la domanda: "[Come posso spiegare l'SQL injection senza gergo tecnico?] (http://security.stackexchange.com/questions/25684/how-can-i-explain-sql-injection-without- tecnico-gergo tecnico) "dal nostro sito gemello sulla sicurezza delle informazioni. –
Si dovrebbe wiki questo, btw. – Will