Utilisation d'une base Access avec ADO.NET

selkis

Connexion à la base de données en mode déconnecté, Déclaration et paramétrage du Data Adapter et Dataset. Ajout, suppression, modification d'enregistrement. ♪

Télécharger le code source commenté exemple vb.net Petite Gestion de contact [ftp://www.ftp-developpez.com/selkis/fichiers/gestioncontact.zip]s.

- Titre : Utilisation d'une base Access avec ADO.NET

- Auteur : selkis

- Parution : 7 juillet 2021

- Licence : Les sources présentées sur cette page sont libres de droits et vous pouvez les utiliser à votre convenance. Par contre, la page de présentation constitue une œuvre intellectuelle protégée par les droits d'auteur. Copyright ® 2021 selkis. Aucune reproduction, même partielle, ne peut être faite de ce site et de l'ensemble de son contenu : textes, documents, images, etc. sans l'autorisation expresse de l'auteur. Sinon vous encourez selon la loi jusqu'à trois ans de prison et jusqu'à 300 000 € de dommages et intérêts.

Sommaire

- I. Connexion à une base de données Access

- I-A. L'objet OleDbConnection

- I-B. Déclaration et paramétrage du Data Adapter

- I-C. Déclaration et paramétrage du DataSet

- I-D. Le principe en six points

- II. Mise à jour d'une base Access

- II-A. L'objet OleDbCommandBuilder

- II-B. Mise à jour de la base de données

- III. Exemple de suppression

- III-A. Récupération d'information

- III-B. Traitement de suppression

- III-C. Mise à jour avec la base

- IV. Exemples DataTable

- IV-A. Comment remplir un Datagrid à partir d'un DataTable

- IV-B. Comment remplir une zone de liste à partir d'un DataTable

I - Connexion à une base de données Access

Dans cet exemple nous allons travailler avec les espaces de noms :

System.Data : stocke toutes les classes constituant l'architecture ADO.net ;

System.Data.OleDb : permet l'accès aux bases de données de type Microsoft (Access, oracle, sql <7).

La déclaration de ces espaces de noms est indispensable pour définir l'accès à notre base de données.

Imports System.Data
Imports System.Data.OleDb

I-A - L'objet OleDbConnection

Avant toute manipulation de données de notre base, nous devons nous connecter à cette dernière.

Comme c'est une base Access, nous allons utiliser l'objet OleDbConnection fourni par l'espace de nom System.Data.OleDb.

Pour ce faire, il nous suffit de créer un nouvel objet Connection et de lui passer en paramètre la chaine de connexion, soit :

'Création de l'objet connection
Private Connection As New OleDb.OleDbConnection()
'parametrage de la chaine de connexion
Connection.ConnectionString = "provider=microsoft.jet.oledb.4.0;" & "data source= " & Application.StartupPath & "\" & "MaBase.mdb;"

I-B - Déclaration et paramétrage du Data Adapter

Un adaptateur de données nous permet de lancer une ou plusieurs instructions SQL et de stocker le résultat dans un objet DataSet.

Il permet également de lire les données d'une base pour les placer dans le DataSet et de mettre à jour les données de la base à partir des modifications effectuées dans le Dataset.

On utilise un Adaptateur par table !

'Declare le DataAdapter et selectionne tous les champs de la table "MaTable"
Private AdapTContact As New OleDb.OleDbDataAdapter("select * from MaTable", Connection)

I-C - Déclaration et paramétrage du DataSet

Un objet DataSet est une copie en mémoire des données de la base, il permet de stocker des données en provenance d'une source de données qui seront manipulées en mode déconnecté, nous permettant ainsi de modifier, ajouter ou supprimer des enregistrements sans avoir recours à la connexion serveur.

Il est donc constitué d'un ou plusieurs objets DataTable (les Tables).

Chaque DataTable contient une collection d'objets DataRow (les lignes) et une collection d'objets DataColumn(les colonnes).

C'est la méthode Fill qui nous intéresse, puisqu'elle nous permet de remplir le DataSet avec la structure et les enregistrements de la table « MaTable » suivant la requête définie par le DataAdapter.

'declaration du DataSet
Private DtSet As New DataSet()
' remplissage du dataset
AdapTContact.Fill(DtSet, "MaTable")

I-D - Le principe en six points

En résumé, six étapes nous suffisent pour remplir un DataSet à partir d'un DataAdapter

paramétrage de la chaine de connexion ;

ouverture de la connexion ;

exécution de la requête ;

définition du DataAdapter ;

remplissage du DataSet avec le résultat de la requête ;

fermeture de la connexion.

Dim Connection As New OleDb.OleDbConnection()
Dim AdapTContact As OleDb.OleDbDataAdapter
Dim DtSet As New DataSet()
Dim Sql As string

'Parametrage de la chaine de connexion
Connection.ConnectionString = "provider=microsoft.jet.oledb.4.0;" & "data source= " & Application.StartupPath & "\" & "MaBase.mdb;"
'ouverture de la connexion
Connection.Open()
'definition de la requete (on selectionne tous les champs de la table "MaTable")
Sql="select * from MaTable", Connection
'definition du DataAdapter
AdapTContact=new OleDbDataAdapter (Sql, connection)
' remplissage du dataset
AdapTContact.Fill(DtSet, "MaTable")
'Fermeture de la connexion
Connection.Close()

II - Mise à jour d'une base Access

Nous avons vu précédemment comment se connecter à une base Access en mode déconnecté, déclarer et paramétrer un DataAdapter, un DataSet et lire les enregistrements contenus dans ce dernier pour remplir un DataGrid.

Nous allons voir maintenant comment il est possible de modifier, supprimer et ajouter un enregistrement (toujours en mode déconnecté) dans notre Dataset à partir de notre Datagrid, puis mettre à jour notre base à l'aide de notre DataAdapter et de l'objet OleDbCommandBuilder.

II-A - L'objet OleDbCommandBuilder

Pour se faciliter la tâche, lors de l'utilisation d'un DataSet, nous avons la possibilité grâce à l'objet OleDbCommandBuilder de générer automatiquement les objets Command utilisés pour le renvoi des données entre le DataSet et le DataAdapter.

Pour créer un objet OleDbCommandBuilder, nous devons le déclarer en lui passant en paramètre l'objet DataAdapter à utiliser.

Dans notre cas

Dim CmdBuild As OleDbCommandBuilder
CmdBuild = New OleDb.OleDbCommandBuilder(AdapTContact)

Maintenant, il nous suffit d'utiliser les différentes méthodes de l'objet pour créer et renvoyer les objets Command qui nous conviennent soit :

GetUpdateCommand : obtient l'objet Command utile pour effectuer une mise à jour dans la base de données ;

GetInsertCommand : obtient l'objet Command utile pour effectuer une insertion dans la base de données ;

GetDeleteCommand : obtient l'objet Command utile pour effectuer une suppression dans la base de données.

AdapTContact.DeleteCommand = CmdBuild.GetDeleteCommand()

II-B - Mise à jour de la base de données

Pour mettre ensuite à jour des données et gérer le transfert de ces données modifiées dans notre base, nous devons nous intéresser aux propriétés citées ci-dessous de l'objet DataAdapter :

UpdateCommand : envoie une requête de modification ;

InsertCommand : envoie une requête d'ajout ;

DeleteCommande : envoie une requête de suppression.

AdapTContact.Update(DtSet, "MaTable")

III - Exemple de suppression

Exemple de suppression d'un enregistrement sélectionné dans un DataGrid

Pour rappel, notre DataGrid se nomme Grid_client, la clé primaire de nos enregistrements est numérique et se situe dans le premier champ.

III-A - Récupération d'information

En premier lieu, nous devons récupérer le numéro de ligne de l'enregistrement à supprimer. Pour ce faire, il suffit d'appliquer la méthode CurrentRowIndex à l'objet DataGrid qui nous renverra le n° de la ligne actuellement sélectionnée.

Dim ligneencours As Integer
ligneencours = Grid_client.CurrentRowIndex

Nous allons ensuite récupérer la clé primaire de cette ligne (qui se situe dans le premier champ de la ligne en cours), grâce à la méthode Item (permet d'obtenir ou de définir la valeur d'une cellule spécifiée) de l'objet DataGrid.

Dim CleUnik As String
CleUnik = Grid_client.Item(ligneencours, 0)

III-B - Traitement de suppression

Nous pouvons donc maintenant rechercher notre enregistrement dans notre DataSet (DtSet pour notre exemple).

Pour ce faire, nous allons créer un objet DataRow nommé Ligne (qui contiendra le filtre de notre sélection, soit l'enregistrement que l'on doit supprimer) et lui affecter notre recherche.

Dim Ligne As DataRow()
Ligne = DtSet.Tables("TContact").Select("Cleunik = " & CleUnik)

Puis le supprimer par la méthode Delete (supprime un DataRow) de l'objet ligne créé précédemment (vous remarquerez le paramètre « 0 » de l'objet ligne, en effet notre filtre porté sur la clé primaire ne nous retourne qu'une ligne qui correspond à l'index « 0 »).

Ligne(0).Delete()

III-C - Mise à jour avec la base

'Ouverture de la connexion
Connection.Open()
'Création CommandBuilder pour notre DataAdapter "AdapTContact"
Dim CmdBuild As OleDbCommandBuilder
CmdBuild = New OleDb.OleDbCommandBuilder(AdapTContact)
'Génération de l'objet Command de suppression nécessaire pour la mise à jour
AdapTContact.DeleteCommand = CmdBuild.GetDeleteCommand()
'Mise à jour avec la base
AdapTContact.Update(DtSet, "MaTable")
'Fermeture de la connexion
Connection.Close()

IV - Exemples DataTable

Télécharger le code source commenté exemple vb.net Petite Gestion de contacts [ftp://www.ftp-developpez.com/selkis/fichiers/gestioncontact.zip] !!!!!!!

IV-A - Comment remplir un Datagrid à partir d'un DataTable

Un contrôle DataGrid affiche les données d'un ensemble de données ADO.NET sous la forme d'un tableau.

Il est très similaire au contrôle FlexGrid de Visual Basic 6.0, mais il comporte un grand nombre de nouvelles fonctions.

Dim MonDataTble As DataTable
MonDataTble = DtSet.Tables("MaTable")

IV-B - Comment remplir une zone de liste à partir d'un DataTable

Une zone de liste vous permet de montrer plusieurs éléments à l'utilisateur, avec la possibilité de sélectionner un ou plusieurs éléments de cette liste.

Dim MonDataTble As DataTable
MonDataTble = DtSet.Tables("MaTable")
'remplissage de la liste , ligne à ligne
Dim Ligne As DataRow()
For Each ligne In Matable.Rows
Liste.Items.Add(ligne.Item("Champs1"))
Next