Il passaggio di parametri a SQL ti evita di dover creare una stringa SQL dinamica.
La creazione di istruzioni SQL dinamiche è un ENORME rischio per la sicurezza perché le persone possono iniettare il proprio codice SQL nella tua applicazione, possibilmente eseguendo comandi indesiderati contro i tuoi dati.
Ci sono alcuni buoni esempi di possibili attacchi SQL injection su:
Attacchi SQL injection per esempio
Esistono due modi per passare i parametri alle istruzioni SQL. Uno è usare le stored procedure come hai menzionato. L'altro consiste nell'usare query parametrizzate (che in realtà è ciò che preferisco).
Una query parametrizzata è in realtà abbastanza semplice in .NET:
using(SqlConnection conn = new SqlConnection(connString))
{
SqlCommand command =
new SqlCommand("SELECT * FROM Users WHERE Username = @Username", conn);
command.Parameters.Add(new SqlParameter("@Username", "Justin Niessner"));
SqlDataAdapter adapter = new SqlDataAdapter(command);
DataTable dt = new DataTable();
adapter.Fill(dt);
}
In quell'esempio, il parametro era @Username
e abbiamo usato i Parameters
raccolta di SqlCommand
oggetto per passare il valore.