Les autres réponses couvrent l'importance des paramètres, mais il y a un inconvénient! En .net, il existe plusieurs méthodes pour créer des paramètres (Add, AddWithValue), mais elles nécessitent toutes que vous vous souciiez inutilement du nom du paramètre, et elles réduisent toutes la lisibilité du SQL dans le code. Juste au moment où vous essayez de méditer sur le SQL, vous devez chercher autour, au-dessus ou en dessous pour voir quelle valeur a été utilisée dans le paramètre.
Je revendique humblement que ma petite classe SqlBuilder est la manière la plus élégante d'écrire des requêtes avec des paramètres. Votre code ressemblera à ceci...
C#
var bldr = new SqlBuilder( myCommand );
bldr.Append("SELECT * FROM CUSTOMERS WHERE ID = ").Value(myId);
//ou
bldr.Append("SELECT * FROM CUSTOMERS WHERE NAME LIKE ").FuzzyValue(myName);
myCommand.CommandText = bldr.ToString();
Votre code sera plus court et beaucoup plus lisible. Vous n'avez même pas besoin de lignes supplémentaires, et, lorsque vous faites des lectures, vous n'avez pas besoin de chercher la valeur des paramètres. La classe dont vous avez besoin se trouve ici...
using System;
using System.Collections.Generic;
using System.Text;
using System.Data;
using System.Data.SqlClient;
public class SqlBuilder
{
private StringBuilder _rq;
private SqlCommand _cmd;
private int _seq;
public SqlBuilder(SqlCommand cmd)
{
_rq = new StringBuilder();
_cmd = cmd;
_seq = 0;
}
public SqlBuilder Append(String str)
{
_rq.Append(str);
return this;
}
public SqlBuilder Value(Object value)
{
string paramName = "@SqlBuilderParam" + _seq++;
_rq.Append(paramName);
_cmd.Parameters.AddWithValue(paramName, value);
return this;
}
public SqlBuilder FuzzyValue(Object value)
{
string paramName = "@SqlBuilderParam" + _seq++;
_rq.Append("'%' + " + paramName + " + '%'");
_cmd.Parameters.AddWithValue(paramName, value);
return this;
}
public override string ToString()
{
return _rq.ToString();
}
}