ADO.NET CRÉATION D`UN DATASET

publicité
ADO.NET
Ado.net est une technologie d'accès aux données qui fournit un ensemble des classes permettant d'accéder
aux données relationnelles. Ado.net propose deux modes d'accès, le mode connecté et le mode déconnecté.
LE MODE CONNECTÉ
Ce mode classique maintient la connexion à la base de données, il permet de créer un mécanisme de "curseur"
permettant de parcourir les données ligne à ligne. Ado.net ne propose qu'un accès en lecture -en avant
seulement- avec ce mode. Il est approprié pour parcourir des tables volumineuses rapidement.
LE MODE DÉCONNECTÉ
C'est la grande nouveauté de l'architecture .net. Après une connexion et le chargement de données, tout se
passe en mémoire. Ceci libère les ressources du serveur de données, par contre le mécanisme de cohérence et
d'intégrité des données est exigeant. Nous allons étudier ce dernier type d'accès.
Dotnet propose un ensemble de classes. Une classe générique, DataSet, est au centre du dispositif ; c'est cette
classe qui servira de conteneur en mémoire des tables et des requêtes. Nous allons partir d'un cas pour décrire
les classes mises en œuvre.
CRÉATION D’UN DATASET
La base de données exemple est créée sous SQl server, son nom est « Etudiant ». Ceci fait nous créons un
nouveau projet de nom « AccèsDonnées ». Nous ajoutons à ce projet une source de données. Pour cela on
sélectionne le projet « AccèsDonnées » et puis dans les menus sur « Données », on choisit « Ajouter une
source de données ». Dans l’assistant qui apparaît on sélectionne « Base de données », puis on fait suivant. Sur
l’écran suivant, on choisit « Dataset », puis suivant.
Sur le pop-up suivant, on clique sur le bouton « Nouvelle connexion ». Pour la source de données, on choisit
MICROSOFT SQL SERVER, on sélectionne son serveur Sql
Server 2008. On saisit ensuite un compte utilisateur connu de
Sql Server 2008 et ayant des droits suffisants sur la base de
données "Etudiant". On teste la connexion. Si tout fonctionne
on fait « OK ».
1
Marie-pascale Delamare d'après Visual Basic 2010 Éditions ENI et les documentations Microsoft.
Demander ensuite à inclure les données sensibles
dans la chaine de connexion. Puis à enregistrer la
connexion.
Et enfin, sélectionner la table Etudiant de la base
de données « Etudiant ».
Le « dataset » est maintenant créé, il reste à le
configurer en fonction des besoins de l’application.
LE DATASET, LES DATATABLES ET LES TABLEADAPTERS
Le concepteur affiche deux classes : une classe Etudiant (dataTable) et une classe EtudiantTableAdapter
(tableAdapter).
La structure d’un groupe de données (DataSet) est très proche de celle d’une base de données relationnelle
dans la mesure où un Dataset est constitué d’une hiérarchie de classes représentant des tables (DataTable),
des lignes (DataRow), des colonnes (DataColumn), des contraintes (Constraint) et même des relations
(Relation) :
2
Marie-pascale Delamare d'après Visual Basic 2010 Éditions ENI et les documentations Microsoft.
La seule chose importante à comprendre est qu’on travaille ici en mémoire, et qu’on va manipuler des objets
instanciation de ces classes. C’est pourquoi il n’y aucun lien entre un DataSet et ses sources de données
physiques.
Le DataSet instancié est donc un objet qui réside en mémoire et qui correspond à une copie locale des données
d'une base. Il contient les tables d'une base mais aussi les relations entre ces différentes tables et les
contraintes appliquées aux données.
Le modèle objet du DataSet a les trois collections suivantes :



La collection "DataTableCollection" : Cette collection peut contenir de zéro à n objets de type
DataTable. Chaque objet DataTable représente une table d'une source de données. Chaque DataTable
est constituée d'une collection Columns et d'une collection Rows qui peuvent contenir respectivement
de zéro à n objets DataRow et DataColumn.
La collection "DataRelationCollection" : Cette collection peut contenir de zéro à n objets de type
DataRelation. Un objet DataRelation défini une relation parent-enfant entre deux tables à partir des
valeurs des clés étrangères.
La collection "ExtendedProperties" : Cette collection correspond à un objet de type PropertyCollection
qui peut contenir de zéro à n propriétés définies par un utilisateur. Cette collection peut être utilisée
afin de stocker des informations personnalisées liées au DataSet utilisé (date et heure de génération
des données, ordre select passé pour générer les données.).
Exemple de déclaration (pour notre projet) d'un dataset et d'une dataTable :
'on declare le dataset
Private dataset As EtudiantDataSet
' on declare la datatable etudiant dans le dataset
Private tableEtudiant As EtudiantDataSet.EtudiantDataTable
Et l'instanciation :
dataset = New EtudiantDataSet
tableEtudiant = New EtudiantDataSet.EtudiantDataTable
3
Marie-pascale Delamare d'après Visual Basic 2010 Éditions ENI et les documentations Microsoft.
La classe TableAdapter, pour nous EtudiantTableAdapter qu'il faudra instancier, est celle qui permet de relier
la source de données physique à l’objet mémoire DataSet. Le DataSet est indépendant de la source de
données. Il ne la connait pas. C’est l'objet instanciation de la classe TableAdapter, qui fait tout le travail de
communication avec la base, à la fois de connexion et à la fois de requêtage pour extraire ou mettre à jour les
données.
C’est un objet qui comprend 4 sous-objets de commande, chargés de « commander » la base, chacun dédié à
un type de requête vers la base. L’objet SelectCommand gère l’extraction de données tandis que les trois
autres objets s’occupent des autres types de requêtes (Insert, Update et Delete).
Le DataSet n’a aucune
connexion directe avec la base
de données physique.
Remarque : Dans le schéma ci-dessus, on parle de DataAdapter et non de TableAdapter. Simplement, retenez
qu’un TableAdapter est une classet DataAdapter mais plus riche que la classe de base. Elle est générée pour
nous par l’Assistant Configuration de sources de données pour nous permettre d’aller plus loin en matière
d’interaction avec la base de données.
Exemple de déclaration d'un tableAdapter :
' on declare le table adapter pour accéder à notre base de données table étudiant
Private tableAdaptaterEtudiant As EtudiantDataSetTableAdapters.EtudiantTableAdapter
Et l'instanciation :
tableAdaptaterEtudiant = New EtudiantDataSetTableAdapters.EtudiantTableAdapter
4
Marie-pascale Delamare d'après Visual Basic 2010 Éditions ENI et les documentations Microsoft.
La lecture de données et le remplissage d'un DataSet : La méthode Fill de l'objet TableAdapter ou
tableAdaptaterEtudiant pour nous, permet d'extraire les données d'une source de données en exécutant la
requête SQL spécifiée dans la propriété SelectCommand. Elle prend en paramètre le DataSet instancié et le
nom de la DataTable instanciée (tableEtudiant pour nous) à remplir avec les données retournées.
Dans notre exemple voici une méthode de notre classe Etudiant:
Public Function lireTousLesEtudiants() As Integer
'accès à la base de données
tableAdaptaterEtudiant.Fill(tableEtudiant)
Return tableEtudiant.Count
End Function
On récupère donc tous les étudiants dans l'objet "tableEtudiant".
La mise à jour de données avec un DataAdapter et un DataSet : La méthode Update de l'objet TableAdapter
ou tableAdaptaterEtudiant pour nous, permet de répercuter sur une source de données les modifications
effectuées dans un DataSet instancié. Cette méthode admet un objet DataSet qui contient les données
modifiées et un objet DataTable optionnel qui contient les modifications à extraire.
Dans notre exemple voici un extrait d'une méthode de notre classe Etudiant permettant de supprimer un
étudiant de la base de données :
Dim numligne As Integer
Dim numerreur As Integer
Dim nombre As Integer
' remplir la table avec le contenu de la base
nombre = lireTousLesEtudiants()
'on recherche la ligne correspondant au numéro de l’étudiant pour cela on trie
tableEtudiant.DefaultView.Sort = "numero ASC"
'ici on récupère le numéro de ligne correspond au numéro de l’étudiant
numligne = tableEtudiant.DefaultView.Find(numero)
'si la clef n'est pas trouvée dans la table
If numligne = -1 Then
numerreur = 1
Else
numerreur = 0
'Supression de la ligne
tableEtudiant.DefaultView(numligne).Delete()
'accès à la base de données par appel à la couche persistance
tableAdaptaterEtudiant.Update(tableEtudiant)
End If
Return numerreur
On marque donc comme supprimée la ligne de la tableEtudiant concernant l'étudiant à supprimer avant de
répercuter dans la base de données. Ici la tableEtudiant contient tous les étudiants, on aurait pu imaginer de ne
recharger la tableEtudiant qu'avec l'étudiant à supprimer.
Mais comment ADO .NET assure-t-il la relation entre les données d'un DataSet instancié et celles contenues
dans une base de données? En réalité, lorsque la méthode Update est invoquée l'objet TableAdapter analyse
les modifications effectuées au niveau de la collection DataRow. En fonction des modifications rencontrées, les
5
Marie-pascale Delamare d'après Visual Basic 2010 Éditions ENI et les documentations Microsoft.
commandes InsertCommand, UpdateCommand et DeleteCommand sont appelées par l'objet TableAdapter,
pour peu quelles soient définies.
GÉNÉRER LES MÉTHODES UTILES À L’APPLICATION AU SEIN DU DATAADAPTER
On double clique sur le « DataSet.xsd ». On sélectionne « EtudiantTableAdapter » et on clique droit pour choisir
Ajouter. Un nouveau menu apparait permettant de définir toutes les requêtes dont nous pourrions avoir
besoin dans notre application.
Exercice : Justement dans cette application nous avons besoin de sélectionner tous les étudiants, sélectionner
un étudiant par son numéro, mettre à jour les données d'un étudiant en connaissant sa clef, supprimer un
étudiant en connaissant sa clef ou encore insérer un nouvel étudiant.
Si vous avez tout compris, vous savez que dans les programmes nous allons travailler sur le DataSet instancié,
mais que les commandes SQL nécessaires doivent être définies au niveau du TableAdapter pour répercuter les
modifications faites sur le DataSet dans la base de données.
Écrire les requêtes SQL nécessaires à notre application. Les intégrer dans le EtudiantTableAdapter.
6
Marie-pascale Delamare d'après Visual Basic 2010 Éditions ENI et les documentations Microsoft.
Téléchargement