ADO.NET : Exploitation d'une base de données en mode connecté avec C# et SQL Server
Cet article présente une approche pratique pour exploiter une base de données en mode connecté en utilisant ADO.NET avec Visual C# et SQL Server. L'objectif est de démontrer les opérations de base telles que la consultation, l'ajout, la modification et la suppression d'enregistrements.
Objectifs et outils utilisés
- Objet principal : Exploitation d’une base de données en mode connecté.
- Objets ADO.NET utilisés :
SqlConnection,SqlCommand,SqlDataReader. - Fournisseur de données : SQL Server.
- Base de données exemple : JD Notation (nommée
SQLJDNotationdans le code de connexion).
Opérations implémentées
L'application conçue permet d'effectuer les opérations suivantes en mode connecté :
- Consultation d’enregistrements.
- Ajout de nouveaux enregistrements.
- Modification d’enregistrements.
- Suppression d’enregistrements.
Détails de l'implémentation en C#
Directives "using" nécessaires
Ces directives sont essentielles pour accéder aux classes ADO.NET nécessaires à l'interaction avec SQL Server.
using System.Data;
using System.Data.SqlClient;Déclaration des variables statiques
Ces variables sont déclarées statiquement pour être accessibles et maintenir leur état à travers différentes méthodes de l'application.
static SqlConnection MySqlConn;
static SqlCommand MySqlCmd;
static SqlDataReader MySqlDataRead;
static string MyStrConn;
static string MyStrSql;
static int NumEnreg, NbEnreg;Méthode de connexion à la base de données (BtnConnexion_Click)
Cette méthode initialise la chaîne de connexion et ouvre la connexion à la base de données SQL Server.
private void BtnConnexion_Click(object sender, System.EventArgs e)
{
MyStrConn = "Server = localhost; Integrated security = SSPI; Initial Catalog = SQLJDNotation";
MySqlConn = new SqlConnection(MyStrConn);
MySqlConn.Open();
}La chaîne de connexion spécifie le serveur (ici, local), utilise la sécurité intégrée de Windows (SSPI) et se connecte à la base de données SQLJDNotation.
Lecture et affichage du premier enregistrement (BtnLecture_Click)
Cette méthode compte le nombre total d'enregistrements dans la table Etudiants et charge le premier enregistrement pour affichage.
private void BtnLecture_Click(object sender, System.EventArgs e)
{
MyStrSql = "SELECT COUNT(*) FROM Etudiants";
MySqlCmd = new SqlCommand(MyStrSql, MySqlConn);
NumEnreg = 0;
NbEnreg = (int)MySqlCmd.ExecuteScalar();
MyStrSql = "SELECT * FROM Etudiants";
MySqlCmd = new SqlCommand(MyStrSql, MySqlConn);
MySqlDataRead = MySqlCmd.ExecuteReader();
if (MySqlDataRead.HasRows)
{
MySqlDataRead.Read();
TxtNumEtud.Text = MySqlDataRead.GetInt16(0).ToString();
TxtNom.Text = MySqlDataRead.GetString(1);
TxtPrenom.Text = MySqlDataRead.GetString(2);
TxtNumNbEnreg.Text = (NumEnreg+1).ToString()+"/"+NbEnreg.ToString();
NumEnreg++;
}
}ExecuteScalar() est utilisé pour récupérer une valeur unique (le nombre d'étudiants). ExecuteReader() crée un objet SqlDataReader pour lire les résultats de la requête SELECT * FROM Etudiants de manière séquentielle.
Navigation vers l'enregistrement suivant (BtnSuivant_Click)
Cette méthode permet de parcourir les enregistrements un par un à l'aide du SqlDataReader.
private void BtnSuivant_Click(object sender, System.EventArgs e)
{
if (!MySqlDataRead.IsClosed)
{
if (MySqlDataRead.Read())
{
TxtNumEtud.Text = MySqlDataRead.GetInt16(0).ToString();
TxtNom.Text = MySqlDataRead.GetString(1);
TxtPrenom.Text = MySqlDataRead.GetString(2);
TxtNumNbEnreg.Text = (NumEnreg+1).ToString()+"/"+NbEnreg.ToString();
NumEnreg++;
}
else
MySqlDataRead.Close();
}
}La méthode MySqlDataRead.Read() tente de lire la ligne suivante. Si aucune ligne n'est disponible, le lecteur est fermé.
Ajout d'un nouvel enregistrement (BtnAjouter_Click)
Cette méthode insère un nouvel étudiant dans la table Etudiants.
private void BtnAjouter_Click(object sender, System.EventArgs e)
{
int EnregAffectes;
if (!MySqlDataRead.IsClosed)
MySqlDataRead.Close();
MyStrSql = "INSERT INTO Etudiants (NumEtudiant, Nom, Prénom) Values(16, 'El Mejor', 'Najib')";
MySqlCmd = new SqlCommand(MyStrSql, MySqlConn);
EnregAffectes = (int)MySqlCmd.ExecuteNonQuery();
MessageBox.Show(EnregAffectes.ToString());
}ExecuteNonQuery() est utilisé pour les commandes SQL qui modifient la base de données (INSERT, UPDATE, DELETE) et ne renvoient pas de jeu de résultats. Il retourne le nombre de lignes affectées.
Modification d'un enregistrement (BtnModifier_Click)
Cette méthode met à jour les informations d'un étudiant existant (ici, l'étudiant ayant NumEtudiant = 16).
private void BtnModifier_Click(object sender, System.EventArgs e)
{
int EnregAffectes;
if (!MySqlDataRead.IsClosed)
MySqlDataRead.Close();
MyStrSql = "UPDATE Etudiants SET Nom = 'EL LOCO', Prénom = 'Najia' WHERE NumEtudiant = 16";
MySqlCmd = new SqlCommand(MyStrSql, MySqlConn);
EnregAffectes = (int)MySqlCmd.ExecuteNonQuery();
MessageBox.Show(EnregAffectes.ToString());
}Comme pour l'ajout, ExecuteNonQuery() est utilisé pour exécuter la commande UPDATE.
Suppression d'un enregistrement (BtnSupprimer_Click)
Cette méthode supprime un enregistrement spécifique de la table Etudiants.
private void BtnSupprimer_Click(object sender, System.EventArgs e)
{
int EnregAffectes;
if (!MySqlDataRead.IsClosed)
MySqlDataRead.Close();
MyStrSql = "DELETE FROM Etudiants WHERE NumEtudiant = 16";
MySqlCmd = new SqlCommand(MyStrSql, MySqlConn);
EnregAffectes = (int)MySqlCmd.ExecuteNonQuery();
MessageBox.Show(EnregAffectes.ToString());
}La commande DELETE est également exécutée via ExecuteNonQuery().
Déconnexion de la base de données (BtnDeconnexion_Click)
Il est crucial de fermer la connexion à la base de données pour libérer les ressources serveur une fois que les opérations sont terminées.
private void BtnDeconnexion_Click(object sender, System.EventArgs e)
{
MySqlConn.Close();
}FAQ sur ADO.NET en mode connecté
Qu'est-ce que le mode connecté d'ADO.NET ?
Le mode connecté d'ADO.NET fait référence à une approche où l'application maintient une connexion ouverte et active à la base de données pendant toute la durée des opérations. Il permet un accès direct et en temps réel aux données, mais nécessite une gestion explicite de l'ouverture et de la fermeture des connexions.
Quels sont les avantages et les inconvénients du mode connecté ?
Les avantages incluent un accès immédiat aux données et une gestion simple pour les opérations rapides. Les inconvénients majeurs sont la consommation de ressources serveur car la connexion est maintenue ouverte, ce qui peut impacter la scalabilité. Il est également plus vulnérable aux problèmes de réseau ou de serveur pendant que la connexion est active.
Quelle est la différence entre ExecuteScalar, ExecuteReader et ExecuteNonQuery ?
Ces trois méthodes de l'objet SqlCommand sont utilisées pour exécuter différents types de requêtes SQL :ExecuteScalar() : Exécute la requête et renvoie la première colonne de la première ligne du jeu de résultats, ignorant le reste. Idéal pour obtenir une valeur unique (par exemple, un COUNT ou un SUM).ExecuteReader() : Exécute la requête et renvoie un objet SqlDataReader, qui permet de lire les données ligne par ligne et colonne par colonne. Utilisé principalement pour les requêtes SELECT qui renvoient plusieurs lignes et colonnes.ExecuteNonQuery() : Exécute la requête et renvoie le nombre de lignes affectées par l'opération. Utilisé pour les commandes qui ne retournent pas de données, comme INSERT, UPDATE, DELETE, et les commandes de définition de données (DDL).