Utilisation de VB.NET en Mode Déconnecté

Introduction :

VB.NET offre une puissante prise en charge des bases de données, y compris en mode déconnecté. En mode déconnecté, les données sont extraites de la base de données dans un conteneur de données local, tel qu’un DataSet ou un DataTable, où elles peuvent être manipulées sans nécessiter de connexion constante à la base de données. Une fois les modifications apportées aux données, elles peuvent être mises à jour dans la base de données.

Principaux Concepts :

  1. DataAdapter : Le DataAdapter est un pont entre la base de données et le DataSet. Il extrait les données de la base de données et les remplit dans le DataSet, puis met à jour les modifications apportées au DataSet dans la base de données.
  2. DataSet : Le DataSet est un conteneur de données local qui stocke des tables de données, généralement extraites d’une base de données. Il peut contenir plusieurs tables, relations et contraintes.
  3. DataTable : Le DataTable est un objet qui représente une table de données dans le DataSet. Il contient des lignes et des colonnes de données, ainsi que des contraintes et des relations.
  4. CommandBuilder : Le CommandBuilder génère automatiquement les commandes SQL (INSERT, UPDATE, DELETE) nécessaires pour mettre à jour les modifications apportées au DataSet dans la base de données.

Exemple de Code :

Voici un exemple simplifié d’utilisation de VB.NET en mode déconnecté avec une base de données :

Imports System.Data.SqlClient

Public Class Form1
Dim connectionString As String = « Data Source=ServerName;Initial Catalog=DatabaseName;Integrated Security=True »
Dim connection As SqlConnection = New SqlConnection(connectionString)
Dim adapter As SqlDataAdapter
Dim dataSet As DataSet

Private Sub Form1_Load(sender As Object, e As EventArgs) Handles MyBase.Load
    ' Chargement des données depuis la base de données dans le DataSet
    adapter = New SqlDataAdapter("SELECT * FROM TableName", connection)
    dataSet = New DataSet()
    adapter.Fill(dataSet, "TableName")

    ' Affichage des données dans un contrôle DataGridView
    DataGridView1.DataSource = dataSet.Tables("TableName")
End Sub

Private Sub btnSave_Click(sender As Object, e As EventArgs) Handles btnSave.Click
    ' Mise à jour des modifications dans la base de données
    Dim builder As New SqlCommandBuilder(adapter)
    adapter.Update(dataSet, "TableName")
End Sub

End Class

Dans cet exemple, lors du chargement du formulaire, les données sont extraites de la table « TableName » de la base de données dans le DataSet, puis affichées dans un contrôle DataGridView. Lorsque l’utilisateur appuie sur le bouton « Enregistrer », toutes les modifications apportées aux données dans le DataGridView sont mises à jour dans la base de données.


1. Configuration de la Connexion à la Base de Données :

Avant de travailler avec des données en mode déconnecté, il est nécessaire de configurer la connexion à la base de données. Voici un exemple de chaîne de connexion à une base de données SQL Server :

Dim connectionString As String = "Data Source=ServerName;Initial Catalog=DatabaseName;Integrated Security=True"

2. Chargement des Données dans un DataSet :

Une fois la connexion établie, les données sont chargées dans un DataSet à l’aide d’un DataAdapter. Voici un exemple :

Dim adapter As SqlDataAdapter
Dim dataSet As DataSet

adapter = New SqlDataAdapter("SELECT * FROM TableName", connection)
dataSet = New DataSet()
adapter.Fill(dataSet, "TableName")

3. Affichage des Données dans un Contrôle DataGridView :

Les données extraites peuvent être affichées dans un contrôle DataGridView pour une visualisation facile. Voici un exemple :

DataGridView1.DataSource = dataSet.Tables("TableName")

4. Modification des Données Locales dans le DataSet :

Les données dans le DataSet peuvent être modifiées localement avant d’être mises à jour dans la base de données. Voici un exemple de modification d’une valeur dans le DataSet :

dataSet.Tables("TableName").Rows(0)("ColumnName") = "New Value"

5. Mise à Jour des Modifications dans la Base de Données :

Une fois les modifications apportées dans le DataSet, elles peuvent être mises à jour dans la base de données à l’aide du DataAdapter. Voici un exemple :

Dim builder As New SqlCommandBuilder(adapter)
adapter.Update(dataSet, "TableName")

Exemple Complet :

Voici un exemple complet d’utilisation de VB.NET en mode déconnecté avec une base de données :

Supposons que nous avons deux tables dans notre base de données : « Customers » et « Orders », avec une relation un-à-plusieurs entre elles (un client peut passer plusieurs commandes).

Exemple complet :

Imports System.Data.SqlClient

Public Class Form1
    Dim connectionString As String = "Data Source=ServerName;Initial Catalog=DatabaseName;Integrated Security=True"
    Dim connection As SqlConnection = New SqlConnection(connectionString)
    Dim adapterCustomers As SqlDataAdapter
    Dim adapterOrders As SqlDataAdapter
    Dim dataSet As DataSet

    Private Sub Form1_Load(sender As Object, e As EventArgs) Handles MyBase.Load
        LoadData()
        BindData()
    End Sub

    Private Sub LoadData()
        adapterCustomers = New SqlDataAdapter("SELECT * FROM Customers", connection)
        adapterOrders = New SqlDataAdapter("SELECT * FROM Orders", connection)

        dataSet = New DataSet()

        adapterCustomers.Fill(dataSet, "Customers")
        adapterOrders.Fill(dataSet, "Orders")
    End Sub

    Private Sub BindData()
        ' ComboBox
        cmbCustomers.DataSource = dataSet.Tables("Customers")
        cmbCustomers.DisplayMember = "CustomerName"
        cmbCustomers.ValueMember = "CustomerID"

        ' DataGridView
        DataGridView1.DataSource = dataSet.Tables("Orders")
    End Sub

    Private Sub btnSave_Click(sender As Object, e As EventArgs) Handles btnSave.Click
        SaveData()
    End Sub

    Private Sub SaveData()
        Dim builderCustomers As New SqlCommandBuilder(adapterCustomers)
        Dim builderOrders As New SqlCommandBuilder(adapterOrders)

        adapterCustomers.Update(dataSet, "Customers")
        adapterOrders.Update(dataSet, "Orders")

        MessageBox.Show("Data saved successfully.")
    End Sub

    Private Sub btnSearch_Click(sender As Object, e As EventArgs) Handles btnSearch.Click
        Dim searchValue As String = txtSearch.Text.Trim()
        If Not String.IsNullOrEmpty(searchValue) Then
            Dim foundRows() As DataRow = dataSet.Tables("Orders").Select("CustomerID = '" & searchValue & "'")
            If foundRows.Length > 0 Then
                Dim searchResult As DataTable = foundRows.CopyToDataTable()
                DataGridView1.DataSource = searchResult
            Else
                MessageBox.Show("No records found for the given CustomerID.")
            End If
        Else
            MessageBox.Show("Please enter a CustomerID to search.")
        End If
    End Sub

    Private Sub btnAdd_Click(sender As Object, e As EventArgs) Handles btnAdd.Click
        Dim newRow As DataRow = dataSet.Tables("Orders").NewRow()
        newRow("OrderID") = txtOrderID.Text
        newRow("CustomerID") = cmbCustomers.SelectedValue
        newRow("OrderDate") = dtpOrderDate.Value
        dataSet.Tables("Orders").Rows.Add(newRow)
    End Sub

    Private Sub btnUpdate_Click(sender As Object, e As EventArgs) Handles btnUpdate.Click
        Dim selectedRowIndex As Integer = DataGridView1.CurrentCell.RowIndex
        If selectedRowIndex >= 0 Then
            dataSet.Tables("Orders").Rows(selectedRowIndex)("OrderID") = txtOrderID.Text
            dataSet.Tables("Orders").Rows(selectedRowIndex)("CustomerID") = cmbCustomers.SelectedValue
            dataSet.Tables("Orders").Rows(selectedRowIndex)("OrderDate") = dtpOrderDate.Value
        Else
            MessageBox.Show("Please select a row to update.")
        End If
    End Sub

    Private Sub btnDelete_Click(sender As Object, e As EventArgs) Handles btnDelete.Click
        Dim selectedRowIndex As Integer = DataGridView1.CurrentCell.RowIndex
        If selectedRowIndex >= 0 Then
            dataSet.Tables("Orders").Rows(selectedRowIndex).Delete()
        Else
            MessageBox.Show("Please select a row to delete.")
        End If
    End Sub
End Class

Dans cet exemple :

  • Nous avons une ComboBox cmbCustomers qui affiche les noms des clients à partir de la table « Customers ».
  • Un DataGridView DataGridView1 affiche les commandes à partir de la table « Orders ».
  • Les boutons btnAdd, btnUpdate, et btnDelete permettent d’ajouter, mettre à jour et supprimer des commandes respectivement.
  • Le bouton btnSearch permet de rechercher les commandes d’un client spécifique en fonction de l’ID client saisi dans le champ de texte txtSearch.
  • Le bouton btnSave permet de sauvegarder toutes les modifications apportées dans la base de données.

Assurez-vous de remplacer « ServerName », « DatabaseName », « Customers », « Orders », « CustomerID », « CustomerName », « OrderID », et « OrderDate » par les noms réels de votre serveur SQL, de votre base de données et de vos tables et colonnes respectives. Adapté cet exemple à votre propre structure de base de données et à vos besoins spécifiques.