Support VB Net - 062954

Télécharger au format pdf ou txt
Télécharger au format pdf ou txt
Vous êtes sur la page 1sur 10

Support de cours de programmation évènementielle et

IHM II

I. Communication Vb.net et BDD


Afin d’établir la communication entre les applications et les bases de données, les langages de
programmation mettent à la disposition du programmeur, différents outils. VB est un langage
qui offre plusieurs outils simples mais efficaces dans le but de faciliter la programmation et
l’utilisation de telles liaisons.
Chaque type de base de données est associé à un «fournisseur», c’est-à-dire un logiciel qui
répond aux requêtes qui lui sont soumises en traitant la structure et le contenu de la base. Il
existe différents «fournisseurs» d’accès aux bases de données.

ADO .net
1. Présentation
ADO.NET (Activex Database Objet.NET) est une couche d'accès aux bases de données. Il
fournit des modules pour accéder à des BDD de différents types (Accès, SQL Server, Oracle,
etc ...)
2. Apports d’ADO .net
Avec ADO.Net Microsoft s'est efforcé de répondre efficacement aux besoins des applications
en apportant les nouveautés suivantes :
❖ Une architecture plus optimisée
Avec .Net, de nouveaux fournisseurs de données voient le jour. Certains fonctionnent en mode
natif, supprimant des couches intermédiaires entre l'application et sa source de données.
ADO.Net pourra ainsi être plus rapide accédant directement à la source de données.
❖ Un meilleur support du mode déconnecté
Le design de ADO.Net répond aux exigences des modèles de développement des applications
actuelles. Dans une application, le maintien d'une connexion SGBD ouverte doit être la plus
courte possible, car le nombre de connexions ouvertes vers une source de données peut
constituer un frein à la capacité de montée en charge d'une application. Aujourd'hui Microsoft
propose des classes spécialisées via l'objet DataReader et via l'objet DataSet.
❖ Un meilleur support de XML
Le XML est utilisé au sein du Framework .NET comme le standard de description et de
persistance des données. Dans ADO.Net il est utilisé comme le format de transmission
universelle de données.
3. Fonctionnalités d’ADO .net
On va différencier 3 types d'accès à la BDD :
✓ Les accès en lecture unitaire : Ces accès seront effectués grâce à un objet de type
SqlCommand. Cet objet va exécuter une requête sur la BDD (un SELECT par exemple).
Puis nous allons nous servir de SqlDataReader, un objet qui va lire la réponse de la BDD
à notre précédente requête. Cette combinaison d'objets va nous permettre de lire une
petite quantité de données (souvent utilisé pour lire une entrée ou même une seule
donnée.
✓ Les accès en lecture de masse : Ils seront effectués de la même manière que
précedemment, seulement la lecture changera. Nous allons utiliser cette fois ci un
SqlDataAdapter permettant d'adapter les données lues pour un objet de type DataSet
(comparable à un tableau). Cette méthode sera utile pour récupérer de multiples
informations (tout une table par exemple)
✓ Les accès en écriture : On va uniquement utiliser un objet de type SqlCommand pour
exécuter une requête d'insertion de données ou de modification par exemple
Dans tous les cas, on doit se connecter à la BDD en utilisant un objet de type SqlConnection.
Voici un petit schéma pour résumer les 3 cas de figures qui se présentent à nous :
Pilotes d’accès aux bases de données

1. Généralités
Il existe de nombreuses bases de données pour les plateformes windows. Pour y accéder, les
applications passent au travers de programmes appelés pilotes (drivers).
Pilote de base de données

Application Base de
données

I1 I2

Dans le schéma ci-dessus, le pilote présente deux interfaces :


• L’interface I1 présentée à l'application
• L’interface I2 vers la base de données
Afin d'éviter qu'une application écrite pour une base de données B1 doive être réécrite si on
migre vers une base de données B2 différente, un effort de normalisation a été fait sur l'interface
I1. Si on utilise des bases de données utilisant des pilotes "normalisés", la base B1 sera fournie
avec un pilote P1, la base B2 avec un pilote P2, et l'interface I1 de ces deux pilotes sera
identique. Aussi n'aura-t-on pas à réécrire l'application. On pourra ainsi, par exemple, migrer
une base de données ACCESS vers une base de données MySQL sans changer l'application.
Il existe deux types de pilotes normalisés :
• Les pilotes ODBC (Open DataBase Connectivity)
• Les pilotes OLE DB (Object Linking and Embedding DataBase)
Les pilotes ODBC permettent l'accès à des bases de données. Les sources de données pour les
pilotes OLE DB sont plus variées : bases de données, messageries, annuaires, ... Il n'y a pas de
limite. Toute source de données peut faire l'objet d'un pilote OLE DB si un éditeur le décide.
L'intérêt est évidemment grand : on a un accès uniforme à une grande variété de données.
La plate-forme .NET est fournie (mai 2002) avec trois pilotes OLE DB pour respectivement :
SQL Server, Oracle et Microsoft Jet (Access). Si on veut travailler avec une base de données
ayant un pilote ODBC mais pas de pilote OLE DB, on ne peut pas. Ainsi on ne peut pas
travailler avec le SGBD MySQL qui (mai 2002) ne fournit pas de pilote OLE DB. Il existe
cependant une série de classes permettant l'accès aux sources de données ODBC, les classes
odbc.net. Elles ne sont pas livrées en standard avec le SDK et il faut aller les chercher sur le
site de Microsoft. Dans les exemples qui vont suivre, nous utiliserons surtout ces classes ODBC
car la plupart des bases de données sous Windows sont livrées avec un tel pilote.
La plate-forme .NET est livrée avec deux types de classes d'accès aux données :
➢ Les classes SQL Server.NET
➢ Les classes OLE Db.NET

2. Installation du pilote ODBC et création d’une source de données

➢ Accéder aux outils d’administration

➢ Ensuite vous accédez à ODBC Data Source version 32-bit


➢ Créer une source de données (Data source) ODBC nommée gest_etudiant
Pour créer une source de données, faudrait d’abord créer une base de données sur MySQL pour
la sélectionner pour la source de données. Cliquez sur le bouton ajouter et sélectionner le pilote
MySQL ODBC ANSI

3. Utilisation du pilote ODBC pour VB .net


Dans une application utilisant une base de données en mode connecté, on trouvera généralement
les étapes suivantes :
✓ Connexion à la base de données
✓ Émissions de requêtes SQL vers la base
✓ Réception et traitement des résultats de ces requêtes
✓ Fermeture de la connexion
Les étapes 2 et 3 sont réalisées de façon répétée, la fermeture de connexion n’ayant lieu qu’à la
fin de l’exploitation de la base. C’est un schéma relativement classique dont vous avez peut-
être l’habitude si vous avez exploité une base de données de façon interactive. Ces étapes sont
les mêmes que la base soit utilisée au travers d'un pilote ODBC ou d'un pilote OLE DB.
Les classes de gestion des sources ODBC se trouvent dans l'espace de noms
Microsoft.Data.Odbc qu'on doit donc importer. Par ailleurs, un certain nombre de classes se
trouve dans l'espace de noms System.Data.
Imports System.Data.Odbc
Phase de connexion
Une connexion ODBC utilise la classe OdbcConnection. Le constructeur de cette classe admet
comme paramètre ce qu'on appelle une chaîne de connexion. Celle-ci est une chaîne de
caractères qui définit tous les paramètres nécessaires pour que la connexion à la base de données
puisse se faire. Ces paramètres peuvent être très nombreux et donc la chaîne complexe. La
chaîne a la forme "param1=valeur1;param2=valeur2;...;paramj=valeurj;".Voici quelques
paramètres paramj possibles :
• Uid : nom d'un utilisateur qui va accéder à la base de données
• Password : mot de passe de l’utilisateur
• Dsn : nom DSN de la base de données si elle en a un
• Datasource : nom de la base de données accédée
Si on définit une source de données comme source de données ODBC à l'aide de
l'administrateur de sources de données ODBC, ces paramètres ont déjà été donnés et enregistrés.
Il suffit alors de passer le paramètre DSN qui donne le nom DSN de la source de données. C'est
ce qui est fait ici :
' chaîne de connexion à la base
Dim connectString As String = "Dsn=gestetudiant"
con = New OdbcConnection(connectString)

Une fois l'objet OdbcConnection construit, on ouvre la connexion avec la méthode Open. Cette
ouverture peut échouer comme toute autre opération sur la base. C'est pourquoi l'ensemble du
code d'accès à la base est-il dans un try-catch. Une fois la connexion établie, on peut émettre
des requêtes SQL sur la base.
' on tente d'accéder à la base de données
Try
' chaîne de connexion à la base
Dim connectString As String = "Dsn=gestetudiant"
con = New OdbcConnection(connectString)
con.Open()
Emettre les requêtes SQL
Pour émettre des requêtes SQL, il nous faut un objet Command, ici plus exactement un objet
OdbcCommand puisque nous utilisons une source de données ODBC. La classe
OdbcCommand a plusieurs constructeurs :
• OdbcCommand() : crée un objet Command vide. Il faudra pour l'utiliser préciser
ultérieurement diverses propriétés :
✓ CommandText : le texte de la requête SQL à exécuter
✓ Connection : l'objet OdbcConnection représentant la connexion à la base de données
sur laquelle la requête sera faite
✓ CommandType : le type de la requête SQL. Il y a trois valeurs possibles
• CommandType.Text : la propriété CommandText contient le texte d'une requête
SQL (valeur par défaut)
• CommandType.StoredProcedure : la propriété CommandText contient le nom
d'une procédure stockée dans la base
• CommandType.TableDirect : la propriété CommandText contient le nom d'une
table T. Equivalent à select * from T. N'existe que pour les pilotes OLE DB.
• OdbcCommand(string sqlText) : le paramètre sqlText sera affecté à la propriété
CommandText. C'est le texte de la requête SQL à exécuter. La connexion devra être précisée
dans la propriété Connection.
• OdbcCommand(string sqlText, OdbcConnection connexion) : le paramètre sqlText
sera affecté à la propriété CommandText et le paramètre connexion à la propriété Connection.

Pour émettre la requête SQL, on dispose de deux méthodes :


• OdbcdataReader. ExecuteReader() : envoie la requête SELECT de CommandText à
la connexion Connection et construit un objet OdbcDataReader permettant l'accès à toutes les
lignes de la table résultat du select
• ExecuteNOnQuery() : envoie la requête de mise à jour (INSERT, UPDATE, DELETE)
de CommandText à la connexion Connection et rend le nombre de lignes affectées par cette
mise à jour.
Dans notre exemple, après avoir ouvert la connexion à la base, nous émettons une requête SQL
SELECT pour avoir le contenu de la table Etudiant :
' exécution d'une commande SQL
Dim sqlText As String = "Select * from etudiant"
Dim command As New OdbcCommand(sqlText)
command.Connection = con
myReader = command.ExecuteReader()

Exploitation du résultat d'une requête SELECT


Le résultat d'une requête SELECT en mode non connecté est un objet DataReader, ici un objet
OdbcDataReader. Cet objet permet d'obtenir séquentiellement toutes les lignes du résultat et
d'avoir des informations sur les colonnes de ces résultats. Examinons quelques propriétés et
méthodes de cette classe :
• FieldCount : Le nombre de colonne de la table
• Item : Item(i) représente la colonne n° i de la ligne courante du résultat
• GetName(i) : nom de la colonne n° i
• Close() : ferme l'objet OdbcdataReader et libère les ressources associées
• Read : avance d'une ligne dans la table des résultats. Rend faux si cela n'est pas possible.
La nouvelle ligne devient la ligne courante du lecteur.
L'exploitation du résultat d'un select est typiquement une exploitation séquentielle analogue à
celle des fichiers texte : on ne peut qu'avancer dans la table, pas reculer :
While myReader.Read()
// instructions
End While

Exemple :
' affichage des données
dgv_etudiant.Rows.Clear()
While (myReader.Read())
dgv_etudiant.Rows.Add(myReader.GetValue(0).ToString(),
myReader.GetValue(1).ToString(),
myReader.GetValue(2).ToString(),
myReader.GetValue(3).ToString()
)

End While

Libération des ressources


Les classes OdbcReader et OdbcConnection possèdent toutes deux une méthode Close() qui
libère les ressources associées aux objets ainsi fermés.
'fermeture lecteur
myReader.Close()
' fermeture connexion
con.Close()

Manipuler les données (INSERT, UPDATE, DELETE)


Les exemples précédents se contentaient de lister le contenu d'une table.
❖ Maintenant pour enregistrer une donnée dans une table, nous avons :
Dim sqlText As String = "INSERT INTO etudiant (matricule,nom,prenom)" +
" VALUES(?, ?, ?)"
Dim command As New OdbcCommand()
command.Connection = con
command.CommandText = sqlText
command.Parameters.Add("@matricule", OdbcType.VarChar).Value = txt_matricule.Text
command.Parameters.Add("@nom", OdbcType.VarChar).Value = txt_nom.Text
command.Parameters.Add("@prenom", OdbcType.VarChar).Value = txt_prenom.Text
command.ExecuteNonQuery()

Ici on définit les paramètres via la méthode OdbcCommand.Parameters.Add() dans laquelle on


définit le paramètre et le type du paramètre. Ensuite la propriété value pour récupérer la valeur
du paramètre.
Au final pour exécuter la requête, on utilise la méthode OdbcCommand.ExecuteNonQuery()
❖ Pour mettre à jour une donnée dans une table, nous avons :
' exécution de la commande de mise à jour commande SQL
Dim sqlText As String = "UPDATE etudiant set nom=?,prenom=? where matricule =?"
Dim command As New OdbcCommand()
command.Connection = con
command.CommandText = sqlText

command.Parameters.Add("@nom", OdbcType.VarChar).Value = txt_nom.Text


command.Parameters.Add("@prenom", OdbcType.VarChar).Value = txt_prenom.Text
command.Parameters.Add("@matricule", OdbcType.VarChar).Value = txt_matricule.Text

command.ExecuteNonQuery()

❖ Pour supprimer une donnée dans une table, nous avons :


' exécution d'une commande SQL
Dim sqlText As String = "DELETE FROM etudiant where matricule =?"
Dim command As New OdbcCommand()
command.Connection = con
command.CommandText = sqlText
command.Parameters.Add("@matricule", OdbcType.VarChar).Value = txt_matricule.Text

command.ExecuteNonQuery()

4. Code source de quelques parties pour la gestion des étudiants en utilisant la


méthode ODBC
➢ L’interface graphique à concevoir

➢ Code pour enregistrer un étudiant


➢ Code pour charger un dataGridView d’étudiants

Vous aimerez peut-être aussi