> Data > ADO.Net 101 SqlCommand

ADO.Net 101 SqlCommand

Data - Par iTPro.fr - Publié le 24 juin 2010
email

par Rick Dobson - Mis en ligne le 16/02/2004 - Publié en Avril 2004

Un objet ADO.NET pour exécuter des commandes SQL Server

Les applications de base de données exécutent fréquemment des instructions SQL dynamiques et des procédures stockées ...Les premières sont utiles pour les opérations liées au langage de définition de données (DDL), par exemple la création de tables, ou pour les opérations d'accès aux données, telles que les requêtes ad hoc. Les secondes constituent l'ossature de la plupart des applications de base de données et elles exécutent généralement des requêtes prédéfinies, ainsi que des mises à  jour de la base de données. SqlCommand est l'objet ADO. NET chargé d'exécuter des instructions SQL dynamiques et des procédures stockées au niveau d'une base de données SQL Server. Il est essentiel de savoir l'utiliser pour commencer à  développer des applications ADO. NET. Par ailleurs, la connaissance du codage dans l'environnement Microsoft .NET et du langage ADO.NET représente une étape préparatoire indispensable pour Yukon, la prochaine version de SQL Server, car celleci fera appel aux langages .NET pour la création d'objets de base de données. Cet article constitue une introduction à  l'utilisation de l'objet SqlCommand. Il explique notamment comment l'employer pour exécuter des instructions DDL SQL dynamiques et passer des paramètres à  une procédure stockée, ou encore pour exécuter une procédure stockée et renvoyer des valeurs. Bien que Visual Studio .NET ne soit pas absolument indispensable pour les exemples présentés ici, son utilisation est nettement préférable à  l'écriture manuelle de ces programmes à  l'aide d'un éditeur de texte et du kit de développement logiciel (SDK) .NET Framework.
Avant de pouvoir utiliser la classe SqlCommand (le code source servant à  créer un objet SqlCommand), vous devez ajouter une directive d'importation pour l'espace de nom System. Data.SqlClient dans votre projet. La directive d'importation permet de faire référence de manière « abrégée » à  des classes dans l'espace de nom, de sorte qu'il n'est pas nécessaire d'ajouter systématiquement le préfixe System. Data.SqlClient à  chaque classe. Pour un projet Visual Basic .NET (VB.NET), ajoutez la ligne suivante en haut de votre fichier source :

Imports System.Data.SqlClient
Après avoir ajouté la directive d'importation, vous êtes prêt à  utiliser les objets ADO.NET SqlCommand dans vos projets.

Le SQL dynamique propose un mécanisme extrêmement
souple d’utilisation des bases de données relationnelles. Par
exemple, il permet d’exécuter des requêtes ad hoc et des requêtes
d’action, ou encore d’exécuter des instructions DDL
SQL afin de créer des objets de base de données. L’exemple
de sous-routine SQLCommandNonQuery du listing 1 illustre
le mode d’utilisation du SQL dynamique avec l’objet
ADO.NET SqlCommand afin de vérifier l’existence d’une
table et de créer conditionnellement la table en question si
elle n’existe pas.
La première ligne de la sous-routine passe les variables
sServer et sDB en tant que paramètres. Les valeurs de ces
deux variables spécifient le serveur de base de données SQL
Server et la base de données qui seront utilisés par l’application.
La sous-routine crée ensuite un nouvel objet ADO. NET
SqlConnection nommé cn pour connecter votre application
VB.NET à  la base de données SQL Server, puis passe la chaîne
de connexion en tant que premier paramètre du constructeur
de l’objet SqlConnection. Cette chaîne utilise la sécurité
intégrée pour se connecter au serveur car ce mécanisme est
plus aisé et plus sûr.
Une fois l’objet Connection créé, la sous-routine instancie
la variable sSQL, qui contiendra les instructions SQL dynamiques,
et crée une instance de l’objet SqlCommand
nommé cmd. Dans cet exemple, le constructeur de l’objet
cmd emploie deux paramètres. Le premier est une chaîne
qui contient l’instruction SQL exécutée par la sous-routine ;
le deuxième est l’objet SqlConnection qui va se connecter au
serveur de base de données cible. Dans le cas présent, la
chaîne sSQL est initialement vide.
Ensuite, la sous-routine met en place une structure Try-
Catch pour exécuter les commandes SQL. La première action
du bloc Try-Catch dans l’encadré A du listing 1 utilise la méthode
Open de l’objet SqlConnection cn pour ouvrir une
connexion avec la base de données SQL Server spécifiée
dans la chaîne de connexion. La sous-routine affecte ensuite
à  la variable sSQL une instruction SQL qui vérifie l’existence
de la table Department. Dans cette instruction, un ordre SELECT
interroge la table
sysobjects de SQL
Server afin de vérifier
l’existence d’une table
utilisateur nommée
Department. Si la requête
trouve la table en
question, la sous-routine
exécute une instruction
DROP TABLE
afin de supprimer la
table de la base de données
cible. Dans le cas
contraire, aucune action
supplémentaire
n’est effectuée.
Afin de pouvoir exécuter
l’instruction SQL,
la sous-routine affecte la
valeur de la variables
SQL à  la propriété CommandText
de l’objet
SqlCommand cmd, puis
u t i l i s e l a méthode
ExecuteNonQuery de l’objet pour envoyer la commande au
système SQL Server. La méthode Execute NonQuery exécute
une instruction SQL qui ne retourne pas d’ensemble de résultats
ni de valeur spécifique ; dans ce cas, elle crée une
table. Le tableau 1 répertorie toutes les méthodes supportées
par l’objet SqlCommand pour l’exécution de commandes
SQL sur la base de données cible.
Après la première commande SQL DROP TABLE, la section
de code de l’encadré B applique la même séquence pour exécuter une commande CREATE TABLE. La sous-routine
commence par assigner à  la variable sSQL une instruction
T-SQL CREATE TABLE qui crée une table à  deux colonnes
nommée Department. La première colonne intitulée
DepartmentID contient des données de type Integer et
constitue également la clé primaire ; la deuxième colonne intitulée
DepartmentName contient des données du type 25-
character. Ensuite, la sous-routine copie la valeur de la variable
sSQL vers la propriété CommandText de l’objet cmd et
appelle la méthode ExecuteNonQuery pour exécuter l’instruction
CREATE TABLE. Après l’exécution de la méthode
ExecuteNonQuery, la table Department existe dans la base
de données nommée au niveau de la variable sDB. En cas
d’erreur au cours de l’une des étapes de traitement, pendant
la phase liée à  la méthode Open de l’objet SqlConnection ou
pendant les instances de la méthode ExecuteNonQuery de
l’objet SqlCommand, le code du bloc Catch s’exécute et une
zone de message affiche le texte de la condition d’exception.
A la fin de la sous-routine CommandNonQuery, l’application
exécute la méthode Close de l’objet SqlConnection afin de
fermer la connexion en cours avec la base de données SQL
Server.
Dans vos applications qui exécutent des instructions SQL
dynamiques, veillez à  valider toutes les saisies utilisateurs
afin de protéger votre système contre les attaques SQL par
injection, lesquelles permettent à  des intrus d’accéder à  vos
bases de données. Bien que cet exemple génère l’intégralité
du code SQL en interne, une pratique courante consiste à 
créer les chaînes d’exécution SQL à  partir de la saisie de l’utilisateur.
Si votre application applique ce principe, vous devez
tester la validité des données entrées de toutes les chaînes de
saisie et vérifier la présence de mots-clés SQL non souhaités
et de caractères significatifs tels que le point-virgule.

Téléchargez gratuitement cette ressource

Protection des Données : 10 Best Practices

Protection des Données : 10 Best Practices

Le TOP 10 des meilleures pratiques, processus et solutions de sécurité pour mettre en œuvre une protection efficace des données et limiter au maximum les répercutions d’une violation de données.

Data - Par iTPro.fr - Publié le 24 juin 2010