Utilisation des requêtes paramétrées avec ado.net 2.0

En informatique de gestion, nous sommes souvent amenés à interroger des bases de données. Malheureusement, dans les environnements multi-linguales l’utilisation des dates et décimaux peut vite devenir fastidieuse. Nous allons voir comment les requêtes paramétrées peuvent nous simplifier la vie.

Mauvaise habitude !
De nombreux développeurs ont pris de très mauvaises habitudes lorsqu’il s’agit d’interroger les bases de données… Parmi elles, on retrouve la manière de passer les paramètres. On trouve trop souvent des codes ressemblant à ça : (voir plus complexe)

string sql = "SELECT * FROM utilisateurs WHERE age<=" + age.ToString();

Dans un environnement simple, ce code n’aura pas de mal à fonctionner mais dès que vous allez vouloir porter votre application sur une machine dont la langue diffère de la votre ou sur une autre base de données… vous risquez d’avoir quelques soucis.

Pour pallier à ce problème, il existe dans le framework une classe nommée DbParameter permettant de simplifier et surtout de sécuriser le passage de paramètres.

Utilisation de DbParameter
L’utilisation de la classe DbParameter est très simple… mais nécessite d’écrire quelques lignes de plus… ce qui rebute la plupart du temps les moins courageux d’entres nous. Nous verrons plus loin qu’il y a pourtant beaucoup d’avantages à l’utiliser.

Nous pouvons donc modifier la requête précédente en :

string sql = "SELECT * FROM utilisateurs WHERE age<=@age";
DbParameter param = cmd.CreateParameter();
param.ParameterName = "@age";
param.DbType = DbType.Int32;
param.Value = age;

cmd.CommandText = sql;
cmd.Parameters.Add(param);

où cmd représente une instance de la classe DbCommand.

Avantages
On voit très clairement dans l’exemple ci-dessus que nous ne nous sommes pas souciés de la localisation… à aucun moment nous vérifions si le séparateur de décimal est le point ou la virgule… Non ! Tout cela est automatique !

Ceci fonctionne aussi pour les dates. Pas besoin de vérifier le format…

Autre point positif… avec les requêtes paramétrées, il n’est pas possible de faire de l’injection SQL.

Ce document intitulé « Utilisation des requêtes paramétrées avec ado.net 2.0 » issu de CodeS SourceS (codes-sources.commentcamarche.net) est mis à disposition sous les termes de la licence Creative Commons. Vous pouvez copier, modifier des copies de cette page, dans les conditions fixées par la licence, tant que cette note apparaît clairement.
Rejoignez-nous