Exemple de code : Requêtes paramétrées (C#, SQL)

by Fabien Lavocat 31. mars 2008 17:25

net.jpgDans cet exemple, nous allons voir comment écrire des requêtes paramètrées. Déjà, pourquoi écrire des requêtes paramètrées ? Et bien d’une part pour ne pas se tromper dans l’écriture de la requête, qui n’a jamais oublié des ‘ dans ses applications ? Ensuite il se pose un problème de sécurité, en effet il peut se produire des failles de SQL Injection.

Prennons une table classique d’utilisateurs :

db.JPG

Une simple table avec trois colonnes : Un identifiant, un nom et un prénom.

   1: // Variables quelconques
   2: String lastname = "Lavocat";
   3: String firstname = "Fabien"; 
   4:  
   5: // Chaîne de connexion à la base de données
   6: String cnxStr = System.Configuration.ConfigurationManager.ConnectionStrings[”cnx”].ConnectionString;
   7: // Requête SQL
   8: String sql = "INSERT INTO Users (user_lastname, user_firstname) VALUES ('" + lastname + "', '" + firstname + "')"; 
   9:  
  10: using (System.Data.SqlClient.SqlConnection cnx = new System.Data.SqlClient.SqlConnection(cnxStr))
  11: using (System.Data.SqlClient.SqlCommand cmd = new System.Data.SqlClient.SqlCommand(sql, cnx))
  12: {
  13:     try
  14:     {
  15:         // Ouverture de la connexion
  16:         cnx.Open(); 
  17:         
  18:         // Exécution de la requête sur la base de données
  19:         cmd.ExecuteNonQuery();
  20:     }
  21:     catch (Exception e)
  22:     {
  23:         Console.WriteLine("Erreur : " + e.Message);
  24:     }
  25:     finally
  26:     {
  27:         // Fermeture de la connexion
  28:         if (cnx.State == System.Data.ConnectionState.Open)
  29:             cnx.Close();
  30:     }
  31: } 

Et maintenant en ajoutant des paramètres :

   1: // Variables quelconques
   2: String lastname = "Lavocat";
   3: String firstname = "Fabien"; 
   4:  
   5: // Chaîne de connexion à la base de données
   6: String cnxStr = System.Configuration.ConfigurationManager.ConnectionStrings[”cnx”].ConnectionString;
   7: // Requête SQL avec paramètres
   8: String sql = "INSERT INTO Users (user_lastname, user_firstname) VALUES (@lastname, @firstname)"; 
   9:  
  10: using (System.Data.SqlClient.SqlConnection cnx = new System.Data.SqlClient.SqlConnection(cnxStr))
  11: using (System.Data.SqlClient.SqlCommand cmd = new System.Data.SqlClient.SqlCommand(sql, cnx))
  12: {
  13:     try
  14:     {
  15:         // Ajout des paramètres
  16:         cmd.Parameters.AddWithValue("lastname", lastname);
  17:         cmd.Parameters.AddWithValue("firstname", firstname);   // Ouverture de la connexion
  18:         cnx.Open();  // Exécution de la requête sur la base de données
  19:         cmd.ExecuteNonQuery();
  20:         }
  21:     catch (Exception e)
  22:     {
  23:         Console.WriteLine("Erreur : " + e.Message);
  24:     }
  25:     finally
  26:     {
  27:         // Fermeture de la connexion
  28:         if (cnx.State == System.Data.ConnectionState.Open)
  29:             cnx.Close();
  30:     }
  31: }

Vous remarquez la modification de la requête SQL. En effet j’ai rajouté deux paramètres qui sont des “variables” précédées d’un @.

   1: cmd.Parameters.AddWithValue("lastname", lastname);
   2: cmd.Parameters.AddWithValue("firstname", firstname); 

Ces deux lignes permettent d’affecter à ces paramètres des valeurs.
Note : Le caractère "@" n’est pas obligatoire ici.

Mots clés Technorati : ,,

Tags: ,

Exemples de code

Commentaires

20/05/2009 10:48:00 #

Alex

Il manque le VALUES dans la requête SQL

Alex France

29/05/2009 12:23:43 #

Fabien Lavocat

Exact merci, je corrige.

Fabien Lavocat France

Ajouter un commentaire


(Affichera votre icône Gravatar)

  Country flag

biuquote
  • Commentaire
  • Aperçu immédiat
Loading



A propos de l'auteur

Fabien Lavocat

Lavocat Fabien
Ingénieur Multimédia - TMM Communication



"Blog-Microsoft.fr is an independent blog and is not affiliated with, nor has it been authorized, sponsored, or otherwise approved by Microsoft Corporation."

Contactez-moi Send mail

MVP
Microsoft Most Valuable Professional
Client Application Development