|
Site |
Cours VB.net |
|
|
|
ADO.NET |
|
|
Comment travailler sur les Base de données en VB.NET? Avec ADO.NET
Généralités:
Pour avoir accès à partir de VB.NET aux bases de données il faut utiliser ADO.NET.
ADO veut dire Activex Database Objet .
C'est la couche d'accès aux bases de données, le SGBD (Système de Gestion de Base de Données) de VB.
ADO.NET est ".NET" donc managé et géré par le CLR.
Il est indépendant de la base de donnée: alors que initialement chaque type de gestionnaire de base de données avait ses instructions, sa manière de fonctionner, ADO.NET à un langage unique pour ouvrir, interroger, modifier une base de données quelle que soit la base de données.
Le langage de requête est le SQL.
Les Managed Providers
Pour avoir accès aux données il faut charger les DRIVERS (ou providers).
Comme d'habitude, il faut:
Charger les références des drivers (les Dll)
Importer les espaces de nom.
Ainsi on a accès aux objets.
Voyons cela:
OLE DB Managed Provider est fourni dans 'System'; après avoir importé le NameSpace System.Data.OLEDB, on peut travailler sur des base Access par exemple.
SQL Server Managed Provider est fourni dans 'System'; après avoir importé le NameSpace System.Data.SqlClient, on peut travailler sur des base SqlServeur.
Un composant ODBC et un composant ORACLE sont disponible sur le site MSDN , il faudra charger la référence de la Dll puis le NameSpace.
Pour travailler sur une base MySQL lisez le très bon didacticiel MySQLDotNet (sur developpez.com bien sur);il utilise le Managed Provider ByteFX
Exemple, pour travailler sur une base Access, il faudra taper:
Imports System.Data.OLEDB
Les Objets ADO.NET
Il faut disposer d'un objet Connexion pour avoir accès à la base de données, on met dans la propriété ConnectionString les paramètres de la base de données (nom de la base de données, chemin, mot de passe..).
En fonction de la BD les paramètres sont déférents. Un site nommé ConnetionStrings.com donne une mine de renseignements pour écrire les paramètres pour une BD.
Avec la méthode Open on ouvre la base.
on peut ensuite travailler de 2 manières:
A- On envoie une requête Sql 'SELECT' à la base , on récupère le résultat dans un objet.
Avec un objet DataReader on extrait les données en lecture seule: une requête SQL (sur un objet command) charge le DataReader. c'est rapide; on peut lire uniquement les données et aller à l'enregistrement suivant. Il travaille en mode connecté. Pour gérer un DataReader on a besoin d'un objet Command.
Avec un objet DataSet on manipule les données: une requête SQL (sur un objet command) charge le DataSet avec des enregistrements ou des champs, on travaille sur les lignes et colonnes du DataSet en local, en mode déconnecté(une fois que le DataSet est chargé, la connexion à la base de données est libérée). Pour alimenter un DataSet on a besoin d'un objet DataAdapter qui fait l'intermédiaire entre la BD et le DataSet.
B- On manipule directement la base. (sans retour de résultats)
Avec un objet Command on peut manipuler directement la BD (UPDATE, INSERT, DELETE CREATE DROP..), on utilise la propriété ExecuteNonQuery pour cela.
Avec la méthodes Close on ferme la base.
Résumons les différents objets nécessaires pour travailler sur une BD:

Noter bien le sens des flèches:
le DataReader est en lecture seule, les données lues dans la BD sont accessibles dans le DataReader.
le DataSet peut lire et écrire des données dans la BD, il faut un DataAdapter en plus de la connexion.
l'objet Command peut modifier la BD.
Ce schéma souligne aussi les objets intermédiaires nécessaires:
un objet connexion dans tous les cas,
un objet Command pour le DataReader,
un objet DataAdapter plus un objet Command pour le DataSet .
L'objet Command permet d'envoyer des ordres en SQL à la BD et de la modifier, il permet aussi, quand on utilise un DataSet, d'envoyer une requête SELECT en SQL afin de remplir le DataSet avec le résultat de la requête.
Enfin certains contrôles comme les DataGrid, les ListBox par exemple peuvent afficher des données à partir d'un DataSet.
Pour mettre à jour la base après modification du DataSet ou de la Grid il faut un objet CommandBuilder.
Mode connecté ou déconnecté:
le DataReader fonctionne en mode connecté,la connexion entre la BD et le DataReader est ouverte tant que le DataReader fonctionne.
le DataSet peut travailler en mode déconnecté: on ouvre la connexion, on charge le DataSet, on ferme la connexion (il faut le faire, ce n'est pas automatique), on travaille sur le DataSet, on peut le rouvrir plus tard pour les mises à jour.
Remarque: En fonction du provider, le nom des objets change:
Avec le provider OleDb, après Imports System.Data.OleDb
on utilisera OleDbConnexion, OleDbAdapter...
Avec le provider SQL, après Imports System.Data.SqlClient
on utilisera SqlConnexion, SqlAdapter...
Un site nommé ConnetionStrings.com donne une mine de renseignements pour écrire les paramètres pour une BD.
Le DataReader
Le DataReader permet donc de lire très rapidement une table, enregistrement par enregistrement, du début à la fin.
Il n'y a pas possibilité d'écrire dans la base.
Le DataSet
Le DataSet a la structure d'une base de données mais en local; il contient:
Des DataTable qui contiennent des DataRow et des DataColumn.
Pour utiliser DataSet, DataTable, DataRow.. il faut importer l'espace de nom Data:
Imports System.Data
On peut créer un Dataset de toutes pièces, mais la plupart du temps, on charge le DataSet à partir d'une base de données.
Une requête SQL charge le DataSet, on travaille sur les lignes et colonnes du DataSet en local ( sur des enregistrements ou des champs), en mode déconnecté (une fois que le DataSet est chargé, la connexion à la base de données peut être libérée).

La structure de données du DataSet reflétera automatiquement et exactement celle des données extraites. Si j'extrais 2 colonnes de données avec l'instruction Sql fournis à l'objet Command, le DataSet aura une table de 2 colonnes avec les données extraites.
Exemple :
Avec ADO.NET je lance une requête SQL demandant toutes les fiches de la table 'nom' dont le champ 'prénom' est 'Philippe', je récupère un DataSet local contenant tous les fiches (Le DataColumn "Prénom" ne contient que des 'Philippe'). Je peux modifier en local le DataSet, (modifier une date de naissance par exemple) et mettre à jour automatiquement la base de données distante.
|
|
|
|
|