Passer des paramètres à SQL vous évite d'avoir à créer une chaîne SQL dynamique.
La création d'instructions SQL dynamiques représente un risque de sécurité ÉNORME, car les utilisateurs peuvent injecter leur propre code SQL dans votre application, exécutant éventuellement des commandes indésirables sur vos données.
Il existe de bons exemples d'attaques par injection SQL possibles sur :
Attaques par injection SQL par exemple
Il existe deux manières de transmettre des paramètres aux instructions SQL. La première consiste à utiliser des procédures stockées comme vous l'avez mentionné. L'autre consiste à utiliser des requêtes paramétrées (ce qui est en fait ce que je préfère).
Une requête paramétrée est en fait assez simple en .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);
}
Dans cet exemple, le paramètre était @Username
et nous avons utilisé les Parameters
collection de SqlCommand
objet à transmettre dans la valeur.