Visual Basic : TP (Ado.net : mode déconnecté)

Objectif :

Travailler dans le mode déconnecté avec les objets DataSet et DataAdaper.

Avant de commencer :

1- Créer la base bibliotheque.
2- Dans la base bibliotheque, crée la table :
Livre (CodeL, Titre, Auteur, NbExemplaires)
3- Remplir la table Livre par les données suivantes :

En mode déconnecté, il est courant d’utiliser un ensemble d’objets pour interagir avec une base de données. Voici quelques-uns des objets les plus couramment utilisés en ADO.NET pour interagir avec une base de données en mode déconnecté :

  • DataSet : Un DataSet est un objet qui représente un cache de données en mémoire qui peut contenir plusieurs tables avec des relations entre elles. Il peut être utilisé pour stocker des données qui ont été extraites de la base de données, ou pour stocker des données qui doivent être insérées, mises à jour ou supprimées de la base de données.
  • SqlDataAdapter : Un SqlDataAdapter est un objet qui permet de remplir un DataSet avec des données à partir d’une source de données, comme une base de données. Il peut également être utilisé pour mettre à jour une base de données avec les données contenues dans un DataSet.
  • SqlCommand : Un SqlCommand est un objet qui permet d’exécuter des commandes SQL sur une base de données. Il peut être utilisé pour insérer, mettre à jour ou supprimer des données dans la base de données, ou pour extraire des données de la base de données.
  • SqlConnection : Un SqlConnection est un objet qui permet de se connecter à une base de données. Il est utilisé pour ouvrir et fermer la connexion à la base de données.
  • DataRow : Un DataRow est un objet qui représente une ligne de données dans un DataTable. Il peut être utilisé pour accéder aux données dans une table, ou pour ajouter, modifier ou supprimer des lignes de données dans une table.
  • DataTable : Un DataTable est un objet qui représente une table de données en mémoire. Il peut être utilisé pour stocker des données qui ont été extraites de la base de données, ou pour stocker des données qui doivent être insérées, mises à jour ou supprimées de la base de données.

Questions :

1- Dans un module, déclarer les objets de connexion et créer la procédure « Connexion() » pour établir une connexion avec le serveur de base de données. Il faut gèrer les exceptions.

Module Module1
  Public Con As SqlConnection
  Sub Connexion()
     Try
         Con = New SqlConnection("initial catalog=db_formation;data     source=192.168.1.200;integrated security=true;")
         Con.Open()
     Catch ex As Exception
         MessageBox.Show("Echec de connexion")
     End Try
  End Sub
End Module

Créer l’interface suivante permettant d’afficher les titres de tous les livres dans un ListBox.

2- Donner le code de la procédure « Remplir_List » qui permet de remplir la liste « lisTitre »

sub Remplir_List()
    dim ds as new DataSet()
    Dim query As String = "SELECT titre FROM Livre"
    Dim adapter As New SqlDataAdapter(query, Con)
    adapter.Fill(ds,"Livre")
    For Each row As DataRow In ds.Tables("Livre").Rows
        lisTitre.Items.Add(row("titre"))
    Next
end sub

Dans le même projet ajouter un deuxième formulaire permettant d’afficher dans un DataGridView tous les livres:

3- Donner le code de la procédure « Remplir_DataGrid » qui permet de remplir le DataGridView « dgLivre »

sub Remplir_DataGrid()
   ' Lier le DataSet au DataGridView
   dgLivre.DataSource = ds
   dgLivre.DataMember = "livre"
end sub

4- Ajouter un combobox « authorsComboBox » au formulaire et ecrire le code de la procedure « remplir_authorsComboBox() » qui permet de remplir le combobox par les noms des auteurs.

Private Sub remplir_authorsComboBox()
    authorsComboBox.DisplayMember = "auteur"
    authorsComboBox.ValueMember = "auteur"
    authorsComboBox.DataSource = ds.Tables("livre").DefaultView.ToTable(True, "auteur")
End Sub

Dans cet exemple, nous utilisons la méthode DefaultView pour créer une vue triée et distincte de la table « livre ». Nous utilisons ensuite la méthode ToTable() sur cette vue pour extraire uniquement les noms d’auteur distincts et créer une nouvelle table. Enfin, nous utilisons cette nouvelle table pour remplir le ComboBox.

Notez que si vous avez beaucoup de données dans la table « livre », il est préférable d’utiliser une méthode de filtrage de base de données pour extraire les noms d’auteur distincts plutôt que d’utiliser une vue triée. Cela peut améliorer les performances de l’application en limitant la quantité de données extraites de la base de données.

5- Modifier le code pour afficher dans le contrôle DataGridView les livres d’un auteur choisi dans le ComboBox.

Private Sub authorsComboBox_SelectedIndexChanged(sender As Object, e As EventArgs) Handles authorsComboBox.SelectedIndexChanged
    Dim selectedAuthor As String = authorsComboBox.SelectedValue.ToString()
    dgLivre.DataSource = ds.Tables("livre").Select("auteur = '" & selectedAuthor & "'").CopyToDataTable()
End Sub

Dans cet exemple, nous utilisons la valeur sélectionnée dans le ComboBox pour filtrer les livres de la DataTable « livre » et créer une nouvelle DataTable contenant uniquement les livres de l’auteur sélectionné. Nous utilisons ensuite la méthode CopyToDataTable() pour créer une nouvelle DataTable avec la même structure que la DataTable d’origine, mais ne contenant que les lignes correspondant au filtre. Enfin, nous utilisons cette nouvelle DataTable pour remplir le DataGridView.

Notez que si vous utilisez une grande quantité de données, il peut être préférable d’utiliser une méthode de filtrage de base de données plutôt que de filtrer la DataTable en mémoire, car cela peut réduire le temps de réponse de l’application.

Ajouter l’interface suivant :

6- Écrire le code pour le Bouton Ajouter qui permet d’ajouter un nouveau livre de la table livre en mode déconnecté.

Private Sub btnAjouter_Click(sender As Object, e As EventArgs) Handles btnAjouter.Click
    Dim newRow As DataRow = ds.Tables("livre").NewRow()
    newRow("titre") = txtTitre.Text
    newRow("auteur") = txtAuteur.Text
    newRow("nb page") = txtNbPages.Text

    ds.Tables("livre").Rows.Add(newRow)

    Dim da As New SqlDataAdapter("SELECT * FROM livre", cnx)
    Dim cb As New SqlCommandBuilder(da)

    da.Update(ds, "livre")

    MessageBox.Show("Livre ajouté avec succès.")
End Sub

Dans cet exemple, nous créons une nouvelle ligne en utilisant la méthode NewRow() de la DataTable « livre ». Nous attribuons ensuite les valeurs des colonnes en utilisant les valeurs entrées par l’utilisateur dans les zones de texte. Nous ajoutons ensuite la nouvelle ligne à la DataTable en utilisant la méthode Rows.Add().

Nous utilisons ensuite un SqlDataAdapter pour mettre à jour la base de données en exécutant la commande SQL "SELECT * FROM livre". Nous utilisons un SqlCommandBuilder pour générer automatiquement les commandes INSERT nécessaires pour ajouter la nouvelle ligne à la base de données. Nous appelons ensuite la méthode Update() du DataAdapter pour mettre à jour la base de données avec la nouvelle ligne.

Enfin, nous affichons un message de confirmation pour informer l’utilisateur que le livre a été ajouté avec succès.

7- Écrire le code pour le Bouton Modifier qui permet de modifier un livre de la table livre en mode déconnecté

Private Sub btnModifier_Click(sender As Object, e As EventArgs) Handles btnModifier.Click
    ' on récupère la ligne sélectionnée dans le datagridview et  
    Dim selectedRow As DataRow = ds.Tables("livre").Rows(dgLivre.CurrentRow.Index)
    ' on modifie la ligne
    selectedRow("titre") = txtTitre.Text
    selectedRow("auteur") = txtAuteur.Text
    selectedRow("nb page") = txtNbPages.Text

    da.Update(ds, "livre")

    MessageBox.Show("Livre modifié avec succès.")
End Sub

Dans cet exemple, nous utilisons le DataAdapter existant « da » pour mettre à jour la base de données en appelant sa méthode Update() et en passant le DataSet « ds » et le nom de la table « livre » à mettre à jour. La méthode Update() génère automatiquement les commandes SQL nécessaires pour mettre à jour la base de données avec les modifications apportées au DataSet.

Enfin, nous affichons un message de confirmation pour informer l’utilisateur que le livre a été modifié avec succès.

8- Écrire le code pour le Bouton Supprimer qui permet de supprimer un livre de la table livre en mode déconnecté.

Voici un exemple de code pour le bouton « Supprimer » qui supprime la ligne sélectionnée dans le DataGridView ainsi que la ligne correspondante dans la table « livre » du DataSet et applique les changements dans la base de données:

Private Sub btnSupprimer_Click(sender As Object, e As EventArgs) Handles btnSupprimer.Click
    If dgLivre.SelectedRows.Count = 1 Then
      Dim selectedRow As DataRow = ds.Tables("livre").Rows(dgLivre.CurrentRow.Index)
        selectedRow.Delete()

        da.Update(ds, "livre")

        MessageBox.Show("Livre supprimé avec succès.")
    Else
        MessageBox.Show("Veuillez sélectionner une ligne à supprimer.")
    End If
End Sub

9- Écrire le code pour le Bouton Enregistre qui permet de valider les mises à jour sur la table livre.

Pour enregistrer les mises à jour dans la table « livre » du DataSet en mode déconnecté, vous pouvez appeler la méthode Update de l’objet DataAdapter associé à la table « livre ».

Voici un exemple de code pour le bouton « Enregistrer » qui applique les modifications dans la base de données:

Private Sub btnEnregistrer_Click(sender As Object, e As EventArgs) Handles btnEnregistrer.Click
    Try
        Dim builder As New SqlCommandBuilder(da)

        da.Update(ds, "livre")
        MessageBox.Show("Mises à jour enregistrées avec succès.")

    Catch ex As Exception
        MessageBox.Show("Erreur lors de l'enregistrement des mises à jour : " & ex.Message)
    End Try
End Sub

Dans cet exemple, da est un SqlDataAdapter lié à la table « livre » du dataset ds. La méthode Update est appelée sur le DataAdapter pour enregistrer les mises à jour sur la table. Avant d’appeler la méthode Update, un objet SqlCommandBuilder est créé à partir du DataAdapter. L’objet SqlCommandBuilder crée automatiquement les commandes SQL nécessaires pour insérer, mettre à jour et supprimer des enregistrements en fonction de la structure de la table et des mises à jour apportées dans le dataset. Cela permet de simplifier le processus de mise à jour de la table en mode déconnecté.

Laisser un commentaire

Votre adresse e-mail ne sera pas publiée. Les champs obligatoires sont indiqués avec *