@Charles: Vous allez dans la bonne direction, mais nous utilisons des requêtes paramétrées pour empêcher principalement des injections SQL. Mettre des valeurs 'externes' (params string[] args
) codées en dur dans les requêtes pose des problèmes. Vous pouvez itérer les arguments, mais vous devez toujours utiliser des paramètres comme ceci:
string[] values = new [] {"value1", "value2", "value3", "value4"};
StringBuilder query = new StringBuilder("Select * From Table Where Column in (");
SqlCommand cmd = new SqlCommand();
cmd.Connection = new SqlConnection("Your connection string");
for(int i = 0; i < columns.Length; i++)
{
string arg = string.Format("@arg{0}", i);
cmd.Parameters.AddwithValue(arg, SanatizeSqlString(columns[i]));
sb.AppendFormat("{0}, ", arg);
}
sb = sb.Remove(sb.Length -2, 2);
sb.Append(")");
cmd.CommandText = sb.ToString();
De cette façon, vous vous retrouverez avec une requête comme:
select * from table where column in (@arg0, @arg1, @arg2, @arg3)
Est-ce qu'il y aura seulement 3 valeurs à match contre ou pourrait leur être plus? –
Voir cette question précédente: http://stackoverflow.com/questions/182181/sqlparameter-conversion – Yuliy
duplication possible de [Paramétrer une clause SQL IN?] (Http://stackoverflow.com/questions/337704/parameterizing-an- sql-in-clause) – Habib