ADO .
NET
Présenté par : MANI Mohammed Adil 1
Problématique
• La persistance est primordiale pour le bon
fonctionnement des applications web.
• La persistance peut être garantie à la base des
sessions, cookies ou JWT ( Voir cours State
Management ).
• Mais les bases de données permettent un
partage de données entre plusieurs utilisateurs.
Problématique
• Les base de données ne sont pas le seul moyen
pour persister et partager les données.
• Les fichiers textes peuvent être une solution
aussi.
• Mais la manipulation des bases de données est
plus simple en utilisant des requêtes SQL.
SGBDR et [Link]
• [Link] est la bibliothèque, la plus ancienne, la plus utilisée
actuellement en ce qui concerne la manipulation des SGBDR.
• C’est une bibliothèque composée de plusieurs classes permettant
d’assurer la communication avec la BD, notamment :
– SQLConnection : Pour ouvrir un canal de communication entre l’application
et la base de données.
– SQLCommand : Pour transporter une requêtes SQL en utilisant le canal de
connexion.
– SQLDataReader : Pour récupérer les données d’une requête select non-
scalaire.
SGBDR et [Link]
• Ces classes se trouvaient dans un package sous le nom de :
[Link]. Ce package a été remplacé à partir de la
version .NET 6.0 par [Link].
• Ce package n’est pas disponible par défaut dans les projets .NET,
nous devons le télécharger et intégrer ses fichiers .dll dans les
références de projet.
• Ceci peut être fait manuellement, ou automatiquement en
utilisant Nuget Manager.
SGBDR et [Link]
• Nuget Manager est un gestionnaire de package offert par Visual
Studio, permettant la recherche, le téléchargement et l’intégration
simple des bibliothèques.
• Vous pouvez utiliser la console, ou l’interface graphique.
• Pour lancer l’interface graphique : Clique droit sur le projet +
Gérer les packages nuget + Chercher : [Link] +
Télécharger.
• Pour lancer la console : Menu Visual Studio + Géstionnaire de
packages Nuget + Console de Gestionnaire de Packages + Lancer la
commande : dotnet add package [Link]
SGBDR et [Link]
Installation de package [Link] via Nuget Manager
SqlConnection
• SqlConnection est une classe permettant d’instancier un objet
qui permet de garantir une communication avec la Base de
données.
• Pour que l’objet puisse communiquer avec une base de
données, il a besoin des informations suivantes :
– Adresse IP du serveur : Dans notre cas, le serveur est local alors il
suffit de remplacer l’IP par un point ‘’ . ‘’
– Nom de base de données
– Login et mot de passe sinon une Authentification Windows.
– Présence d’encryptage : Ce paramètre est nouveau, pour demander
l’utilisateur de choisir entre communication Cryptée ou non Cryptée.
SqlConnection
SqlConnection avec authentification windows
• Le constructeur, demande comme paramètre une chaine de caractères qui
doit être écrite soigneusement. Vous devez respecter les mots clés, l’ordre
n’est pas important.
– Data source = Adresse IP de serveur
– Initial catalog = Nom de base de données
– Integrated security = Mode d’authentification windows.
– Encrypt = Valeur booléen pour activer ou désactiver l’encryptage.
SqlConnection avec Login et Password
SqlConnection – Open et Close
• Cet objet est composé essentiellement de 2 fonctions
principales : Open() et Close().
• Pour pouvoir envoyer une requête à un serveur SQL, vous
devez ouvrir la connexion.
• Une parmi les bonnes pratiques en utilisant ce Mode, est la
fermeture de la connexion une fois le requête envoyée.
Ouverture et fermeture de connexion
SqlConnection – Exceptions
• En manipulant cet objet, vous pouvez faire face à plusieurs
exceptions, les plus fréquentes sont :
– ‘Keyword not supported’ = Une erreur dans l’écriture des mots clés.
– 'A connection was successfully established with the
server, but then an error occurred during the login
process’ = Une erreur dans l’écriture de nom de la base de
données.
– 'A network-related or instance-specific error occurred
while establishing a connection to SQL Server’ = Une
erreur dans l’écriture du nom de serveur, si le nom est correcte
alors le serveur est arrêté, pour le démarrer : Services + Sql
Express + Démarer
SqlCommand
• SqlCommand est une classe permettant d’instancier un objet
qui permet d’exécuter une requêtes sous serveur de BD.
• Pour que l’objet puisse envoyer une requête correctement, il a
besoin de :
– Une requête correcte : C’est la partie critique
– L’objet de connexion : L’objet Conn discuté précédemment.
Déclaration d’un objet SQL commande en utilisant le constructeur d’initialisation
Déclaration d’un objet SQL commande en utilisant le constructeur par défaut
SqlCommand
• La déclaration ne lance aucune exécution.
• SqlCommand est composé principalement de 3 fonctions pour
exécuter la requête SQL passée :
– ExecuteNonQuery = Utilisée avec les requêtes d’action, Insert, Update et Delete
– ExecuteReader = Utilisée pour les requête Select non-scalaires
– ExecuteScalar = Utilisée pour les requêtes scalaires.
• Exemple de requêtes scalaires : Une requête avec 1 seule valeur
– select count(*) from produit.
– Select Max(id) from client.
• Exemple de requête non scalaires : Une requête avec plus d’une valeur :
– Select * from client
– Select libelle from produit
– Select Max(prix), Min(prix) from produit.
SqlCommand
• Exemple complet d’exécution d’une requête d’insertion:
Déclaration de SQLConnection et SqlCommand + Exécution de requête
• Exemple complet d’exécution d’une requête scalaire :
Déclaration de SQLConnection et SqlCommand + Exécution de requête
TP – Gestion de commandes
• Créer une nouvelle base de données.
• Créer une nouvelle table Category avec les champs :
– Id = int, primary key, identity (1,1)
– Libelle = varchar(50)
• Créer un nouveau projet [Link]
• Créer un nouveau contrôleur : CategoriesController
• Créer un ViewModel pour le formulaire d’ajout : CategorieVM.
• Ajouter 2 fonctions au contrôleur : Une pour afficher le formulaire, et une
pour la récupération.
• Ajouter une fonction au contrôleur, pour afficher le nombre de catégories.
• Bonnes pratiques :
– Pour respecter les principes de MVC, la requêtes SQL ne doivent pas être écrite dans le
contrôleur. Créer un classe Model : Categorie, et ajouter une fonction Add() à cette
classe puis modifier votre contrôleur.
SqlDataReader
• SQLDataReader est l’objet responsable de la lecture du
résulta d’une requête de sélection non-scalaire. Il permet
d’itérer sur le résulta grâce à la fonction Read().
• Vous pouvez utiliser la fonction .Read() pour lire le résultat de
la requête ligne par ligne. Read() retourne false si l’itération
est terminée.
• Vous pouvez aussi utiliser l’attribut Boolean .hasRows pour
vérifier si le DataReader est plein.
• Vous pouvez utiliser la fonction IsDBNull(index) pour vérifier
si la valeur récupérée est null.
SqlDataReader – Méthode 1
• Exemple de récupération de la liste des catégories depuis la
base de données avec remplissage de List.
Récupération de la liste des catégories
SqlDataReader – Méthode 2
Récupération de la liste des catégories
SqlDataReader – Bonnes Pratiques
Récupération de la liste des catégories – Utilisation de Using pour libération de mémoire
TP – Extension
• Ajouter une fonction au contrôleur pour afficher la liste de catégories.
• A côté de chaque catégorie, afficher 2 liens : Modifier et Supprimer.
• Ajouter une fonction Update pour afficher les informations ancienne dans
un formulaire.
• Ajouter une fonction Update pour appliquer la modification.
• Ajouter une fonction supprimer pour supprimer la catégorie.
• Ajouter un formulaire de recherche composé d’une zone de texte, puis
afficher les catégories qui contiennent la chaine saisie.