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 :
- 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.
- 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.
- 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.
- 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
, etbtnDelete
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 textetxtSearch
. - 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.