Vous ne trouvez pas de réponse à votre problème ? Alors posez la question dans le forum. Souvenez-vous qu'il n'y a jamais de question bête, mais rester dans l'ignorance parce que l'on n'ose pas poser une question, ça c'est une erreur !

UTILISATION DES REQUÊTES PARAMÉTRÉES AVEC ADO.NET 2.0


Information sur le tutorial

Catégorie :Base de données Tutorial .NET ( DotNet ) Date de création : 02/07/2007 14:59:06 Vu : 6 432 fois

Note :
Aucune note

Commentaire sur cette source (6)
Ajouter un commentaire et/ou une note


Description

Alors que beaucoup de développeurs s'embêtent avec la localisation(symbole décimal, format de la date...) et les problèmes d'injection SQL... d'autres utilisent les requêtes paramétrées... voici un très court tutoriel sur leur utilisation.

Tutorial

ADO.net : Les requêtes paramétrées

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.Parameters.Add(param);

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.



signaler à un administrateur
Commentaire de moumouche_a le 13/12/2007 18:34:04

merci pour votre astu

signaler à un administrateur
Commentaire de amdevelop le 26/01/2008 16:35:28

Merci pour le code, il sera mieux si vous l'avez ecrit dés le début (déclaration du cmd)

signaler à un administrateur
Commentaire de The Red Man le 01/02/2008 17:42:39

A quel moment utilise tu la variable sql ??

signaler à un administrateur
Commentaire de meliubaf le 21/05/2008 17:02:34

bon tutorial, mais malheureusement avec Sybase et ses dll que j'ajoute au GAC je ne m'en sors pas. La ligne de commande SQL fonctionne mais si je veux passer des paramètres, pas moyen...

signaler à un administrateur
Commentaire de TiboAppert le 10/06/2009 15:45:56

Cela ne fonctionne qu'avec le provider SqlClient (avec les paramètres sous la forme @Parametre). J'aimerais le faire avec du OleDb et cela ne fonctionne pas. OleDb utilise ? dans les requêtes pour les remplacer par les valeurs des paramètres...

Si quelqu'un a une solution, je suis preneur!!! ;)

signaler à un administrateur
Commentaire de nhervagault le 23/06/2009 23:01:19 administrateur CS

Avec access c'est

string SqlString = "Insert Into Contacts (FirstName, LastName) Values (?,?)";
using (OleDbConnection conn = new OleDbConnection(ConnString))
{
  using (OleDbCommand cmd = new OleDbCommand(SqlString, conn))
  {
    cmd.CommandType = CommandType.Text;
    cmd.Parameters.AddWithValue("FirstName", txtFirstName.Text);
    cmd.Parameters.AddWithValue("LastName", txtLastName.Text);
    conn.Open();
    cmd.ExecuteNonQuery();
  }
}

Ajouter un commentaire



Nos sponsors

Sondage...

CalendriCode

Juillet 2009
LMMJVSD
  12345
6789101112
13141516171819
20212223242526
2728293031  

Consulter la suite du CalendriCode

Comparez les prix Nouvelle version

Photothèque Nouveau !



Développement réalisé par Nicolas SOREL (Nix) avec l'aide de : Cyril DURAND et Emmanuel (EBArtSoft), Merci à Vincent pour ses précieux conseils
CodeS-SourceS.com© Toute reproduction même partielle est interdite sauf accord écrit du Webmaster
CodeS-SourceS.com© est une marque déposée tous droits réservés
Temps d'éxécution de la page : 0,094 sec

Google Coop CodeS-SourceS Google Coop CodeS-SourceS


Certaines images présentes sur le site (notament certains avatars) sont issues des collections IconShock, donc si vous souhaitez utiliser ces icons vous devez les acheter, ne les copiez pas et ne utilisez pas dans vos sites et applications sans les avoir commandé.