L ACCÈS AUX DONNÉES AVEC ADO.NET - S.R.
←
→
Transcription du contenu de la page
Si votre navigateur ne rend pas la page correctement, lisez s'il vous plaît le contenu de la page ci-dessous
ADO.Net S.R.
L‛ACCÈS AUX DONNÉES AVEC ADO.NET
L‛OBJET DATAREADER
L‛objet DataReader permet d‛extraire un flux de données en lecture seule et permet la navigation
en avant uniquement à partir de la base de données. Il permet également d‛améliorer les perfor-
mances de l‛application et de réduire la charge du système, puisqu‛une seule ligne à la fois est pla-
cée dans la mémoire tampon, contrairement à l‛objet DataSet qui mémorise toutes les données de
la base. L‛objet DataReader facilite au maximum l‛utilisation des données brutes sous ADO.NET; il
n‛est pas nécessaire d‛alimenter l‛objet DataSet, tâche parfois coûteuse s‛il contient de nombreu-
ses données. L‛objet DataReader présente cependant un inconvénient; Il requiert une connexion
ouverte à une base de données et augmente l‛activité réseau.
En résumé:
Contrairement au DataSet, le DataReader travaille en mode connexion ouverte. Il emprunte donc
moins de ressources puisque seul l‛enregistrement courant est chargé en mémoire. Pour réaliser
la connexion, nous avons besoin de la chaîne de connexion (Désignant la B.D. et le serveur...), la
chaîne SQL (Chaîne désignant la requête permettant d‛extraire les données), l‛objet SqlCom-
mand établissant le lien entre les deux et l‛objet SqlDataReader pour lire les données.
● Démarrer VS.Net,
● Créer une nouvelle application Windows,
● La nommer ADO et valider,
Comme l‛illustre la figure ci-contre:
● Ajouter un contrôle TextBox sur le formulaire,
Nous allons l‛utiliser pour afficher les données récupérées
dans la base de données.
● Le nommer resultat,
● Vider sa propriété Text,
● Régler sa propriété Anchor sur Top, Bottom, Left, Right,
Ainsi la zone de texte se redimensionne avec le formu-
laire.
● Régler sa propriété Multiline sur True,
● Puis étirer la zone de texte comme sur la figure.
Page 1ADO.Net S.R.
● De même, ajouter deux boutons en bas du formulaire,
● Nommer le premier ConnexionDR,
● Nommer le second Quitter,
● Affecter leur propriété Text comme sur la figure,
● Régler leur propriété Anchor sur Bottom, Left, pour qu’ils soient ancrés au coin inférieur gauche du
formulaire,
● Régler leur propriété FlatStyle sur Popup,
● Enfin affecter la propriété AcceptButton du formulaire sur ConnexionDR, ainsi que la propriété
CancelButton sur Quitter,
Ainsi le bouton ConnexionDR est commandé par la touche Entrée du clavier tandis que le bouton
Quitter est commandé par la touche Echap.
● Afficher l’explorateur de serveurs,
● Déployer l’arborescence Serveurs SQL de façon à afficher les B.D,
Dans ce premier exemple, nous allons récupérer des données de la
table Employees de la b.d. Northwind.
● Basculer en mode édition de code et créer la procédure
ModeConnecte,
Private Sub ModeConnecte()
Dim requete As String ‘Chaîne de requête
Dim Base As String ‘Chaîne pour la base
Dim objCommand As SqlClient.SqlCommand
Dim objDR As SqlClient.SqlDataReader
‘Si nom du serveur à la place de Local, pas de parenthèses
Base = «Initial Catalog=Northwind;Data Source=(LOCAL);User ID=sa;Password=;»
requete = «SELECT * FROM Employees»
‘Initialise l’objet SqlDataReader avec les chaînes SQL et de connexion
objCommand = New SqlClient.SqlCommand(requete, New SqlClient.SqlConnection(Base))
‘Ouvre la connexion
objCommand.Connection.Open()
objDR = objCommand.ExecuteReader(CommandBehavior.CloseConnection)
‘Cette boucle passe en revue tous les enregistrements de la table
Do While objDR.Read = True
‘GetString(1) soit la colonne 2 de la table
resultat.Text = resultat.Text & Chr(13) & Chr(10) & objDR.GetString(1)
Loop
‘Ferme la connexion
objDR.Close()
End Sub
Page 2ADO.Net S.R.
Pour que cet exemple fonctionne correctement, l‛installation de SQL Server 2000 doit être faite
en tenant compte des étapes suivantes:
Procédure d’installation de SQL SERVER 2000 pour exploiter cet exemple.
◘ Installation par défaut.
Etape compte de services:
◘ Utiliser un compte d’utilisateur de domaine.
Etape Mode d’authentification:
◘ Mode mixte pour la conexion SA, mot de passe vierge.
Dans la procédure ModeConnecte, nous utilisons l‛objet SqlCommand pour exécuter la requête
via la méthode ExecuteReader. Cette dernière renvoie un objet SqlDataReader renseigné au sein
duquel nous pouvons exécuter une boucle et afficher le nom des Employés.
Il est fondamental de comprendre qu‛avec un DataRader, nous restons connectés aux données
pendant toute la durée de la boucle.
A ce stade, une question relative à la conception se pose: faut-il utiliser l‛objet DataReader ou
l‛objet DataSet ? La réponse dépend surtout des performances. Si vous les souhaitez élevées et
que vous accédez une seule fois aux données extraites, l‛objet DataReader est recommandé. Si
vous accédez aux mêmes données plusieurs fois ou modélisez une relation complexe dans la mé-
moire, l‛objet DataSet convient davantage.
La méthode Read de l‛objet DataReader permet d‛obtenir une ligne à partir des résultats de la
requête. Chaque colonne de la ligne renvoyée est accessible à l‛aide du nom ou de la référence
ordinale de la colonne, transmis à l‛objet DataReader ou, en vue d‛améliorer les performances, cet
objet fournit une série de méthode permettant d‛accéder aux valeurs de colonne selon leur type
de données natif (GetDateTime, GetDouble, GetGuid, GetInt32, etc...).
L‛objet DataReader fournit un flux de données non muni d‛un tampon, permettant à la logique
procédurale de traiter séquentiellement les résultats avec efficacité, à partir d‛une source de
données. Il facilite l‛extraction de données d‛une quantité importante, étant donnée que la mise
en cache ne concerne pas toutes les données, mais une seule ligne à la fois. La méthode Close doit
toujours être appelée lors de l‛utilisation de l‛objet DataReader et de la fermeture de la con-
nexion à la base de données de ce même objet, car le ramasse-miettes ne la ferme pas lorsqu‛il le
rencontre.
● Basculer en mode Design,
● Double cliquer sur le bouton ConnexionDR de façon à basculer en mode Edition de code entre les
bornes de la procédure Private Sub ConnexionDR_Click,
● Saisir la ligne modeConnecte(),
Page 3ADO.Net S.R.
Au clic sur le bouton, nous appelons ainsi la procédure précé-
demment saisie réalisant la connexion aux données.
● Exécuter l’application,
● Cliquer sur le bouton ConnexionDr ou enfoncer la touche
Entrée,
Les noms des employés s‛affichent en effet dans la zone de
texte. En effet la méthode GetString de l‛objet DataRea-
der permet de récupérer les informations du champ désigné
(objDR.GetString(1)). Le 1 passé en paramètre pointe ainsi
sur la deuxième colonne puisque la numérotation commence à
0.
C‛est ce que nous constatons si nous affichons la table Employees de la base NorthWind.
● Refermer le formulaire,
● Afficher cette table par double clic sur son nom depuis
l’explorateur de serveurs,
Vous constatez en effet la correspondance des noms
de la deuxième colonne et de ceux que nous avons ex-
traits dans la zone de texte.
● Refermer la table.
Nous n‛avons pas programmé le bouton Quitter.
● Ajouter l’instruction End entre les bornes de sa procédure.
L‛OBJET DATASET
Cet objet joue un rôle essentiel dans les scénarios de données déconnectées et distribuées sous
ADO.Net. Il offre une représentation des données interne à la mémoire et propose un modèle
de programmation relationnel cohérent qui ne tient pas compte de la source de données. L‛objet
DataSet représente un ensemble de données complet comprenant des tables associées, des con-
traintes et des relations entre les tables, à l‛instar d‛une petite base de données relationnelle
installée dans la mémoire.
La quantité de données à y intégrer doit être surveillée car il consomme beaucoup de mémoire.
Page 4ADO.Net S.R.
L‛objet DataSet peut rendre persistant et recharger son contenu au format XML et son schéma
au format XSD. Il est totalement déconnecté de toute base de données; Par conséquent, vous
pouvez l‛alimenter comme bon vous semble, à l‛aide des données nécessaires dans la mémoire.
● Ajouter un bouton sur le formulaire et le nommer ConnexionDs,
● Basculer en mode Edition de code et créer la procédure
ModeDeconnecte,
● Puis, saisir le code comme suit:
Private Sub ModeDeconnecte()
Dim requete As String ‘Chaîne de requête
Dim Base As String ‘Chaîne pour la base et le serveur...
Dim objDs As New Data.DataSet()
Dim objDA As SqlClient.SqlDataAdapter
‘Lorsque l’on désigne le nom du serveur à la place de Local, il ne faut pas les
parenthèses
Base = “Initial Catalog=Northwind;Data Source=(LOCAL);User ID=sa;Password=;”
requete = “SELECT * FROM Employees”
‘L’objet DataAdapter est utilisé pour faire le lien entre la requete et la
chaîne de connexion
objDA = New SqlClient.SqlDataAdapter(requete, Base)
‘C’est lui qui remplit ensuite l’objet DataSet (Données en mémoire).
objDA.Fill(objDs)
Dim compteur As Integer
‘Toutes les lignes (Rows(compteur)) de la deuxième colonne (Item(1)).
For compteur = 0 To objDs.Tables(0).Rows.Count - 1
resultat.Text = resultat.Text & Chr(13) & Chr(10) & objDs.Tables(0).Rows(co
mpteur).Item(1)
Next
End Sub
La connexion à l‛aide d‛un DataSet requiert donc une chaîne de requête (Requete dans cette exem-
ple) pour définir les données à extraire. De même, nous avons besoin d‛une chaîne de connexion
(Base ici) pour définir la base et le serveur. Il nous faut aussi un objet DataAdapter permettant
de faire le lien entre les deux puis de remplir l‛objet DataSet.
Ici, ce n‛est plus la méthode GetString qui permet de récupérer les données d‛un champ mais les
propriétés Rows et Item désignant respectivement l’enregistrement et le champ.
● Basculer en mode Design et double cliquer sur le bouton ConnexionDs,
● Saisir la ligne ModeDeconnecte(),
Au clic sur le bouton, nous appelons ainsi la procédure.
Page 5ADO.Net S.R.
● Exécuter l’application,
● Cliquer sur le bouton ConnexionDs,
Le résultat est similaire à la connexion précédente. Mais ici nous stockons les données en mémoire
et les manipulons au travers de l‛objet DataSet tout en étant déconnecté de la base de données.
● Cliquer sur le bouton Quitter ou enfoncer la touche Echap du clavier pour fermer le formulaire.
Dans le code de la procédure précédente, notez l‛importance de l‛objet DataAdpater. C‛est lui qui
établit le lien et remplit le DataSet.
Chaque fournisseur de données .Net inclus dans le .Net FrameWork possède un objet DataAdap-
ter. Le fournisseur OLEDB contient un objet OleDbDataAdapter et le fournisseur de SQLServer
comprend un objet SqlDataAdapter. Ce dernier permet d‛extraire les données depuis une source
et d‛alimenter les objets DataTables et les contraintes dans un objet DataSet. L‛objet DataAd-
pater permet également de transmettre les modifications effectuées dans l‛objet DataSet à la
source de données. Il utilise l‛objet Connection du fournisseur de données .NET pour se connec-
ter à une source de données et les objets Command pour extraire les données de la source et y
appliquer les modifications, à partir de l‛objet DataSet. Cet objet diffère de l‛objet DataReader
en ce sens que ce dernier utilise l‛objet Connection pour accéder directement aux données, sans
utiliser l‛objet DataAdapter.
MISE À JOUR DE DONNÉES
Voyons maintenant comment il est possible de modifier les données d‛une table au travers d‛un Da-
taSet. Pour modifier les données, nous avons toujours besoin d‛une chaîne pour la requête ainsi que
d‛une chaîne pour la connexion. De même nous avons besoin d‛un objet DataAdapter pour remplir
le DataSet. Donc il nous faut un DataSet. Ce qui diffère c‛est l‛utilisation d‛un objet CommandBuil-
der. Ce dernier est essentiel, il permet de créer en interne les commandes INSERT, UPDATE et
DELETE.
C‛est ce que nous allons voir en ajoutant un employé à la table Employees de la base de données
NorthWind.
Pour ce faire, nous utilisons la fonction InputBox permettant à l‛utilisateur de spécifier les nou-
velles données pour chaque champ.
Page 6ADO.Net S.R.
● Ajouter le bouton MAJ sur le formulaire comme le propose la figure,
● Basculer en mode édition de code,
● Créer la procédure , comme suit:
Private Sub MiseAJour()
Dim requete As String
Dim base As String
Dim objDa As SqlClient.SqlDataAdapter
Dim objDs As New Data.DataSet()
Dim objCB As SqlClient.SqlCommandBuilder
Dim objLigne As Data.DataRow
Dim compteur As Integer
Dim result As String
‘requête et connexion
base = “Initial Catalog=Northwind;Data Source=(LOCAL);User Id=sa;Password=;”
requete = “SELECT * FROM Employees”
‘Initialise l’objet Adapter avec les chaînes
objDa = New SqlClient.SqlDataAdapter(requete, base)
‘Initialise le CommandBuilder en le transmettant au DataAdapter
‘Cela crée les commandes Insert, Update, et delete du DataAdapter
objCB = New SqlClient.SqlCommandBuilder(objDa)
‘Alimente le DataSet avec le DataAdapter pour alimenter la table des employés
objDa.Fill(objDs, “Employees”)
‘Ajoute un nouvel employé dans la table locale en mémoire
objLigne = objDs.Tables(“Employees”).NewRow
objLigne(1) = InputBox(“Nom du nouvel employé!”, “Nom”)
objLigne(2) = InputBox(“Prénom du nouvel employé!”, “Prénom”)
objLigne(3) = InputBox(“Fonction du nouvel employé!”, “Fonction”)
objLigne(4) = InputBox(“Civilité du nouvel employé!”, “Civilité”)
objLigne(5) = InputBox(“Date de naissance du nouvel employé!”, “Date”)
objDs.Tables(“Employees”).Rows.Add(objLigne)
‘Effectue la mise à jour sur le serveur
objDa.Update(objDs, “Employees”)
End Sub
● Afficher le formulaire en mode Design,
● Double cliquer sur le bouton MAJ,
● Saisir la ligne MiseAJour(), permettant l’appel de la procédure précédente.
Page 7ADO.Net S.R.
● Exécuter l’application,
● Cliquer sur le bouton MAJ,
● Saisir les informations du nouvel employé aux invites,
● Cliquer ensuite sur l’un des deux précédents boutons permettant
d’accéder aux données de la même table.
Comme vous le constatez, et comme le montre la figure ci-dessous,
le nouvel employé a effectivement été ajouté à la table Employees
de la base de données NorthWind.
● Cliquer sur Quitter ou enfoncer la touche Echap pour
refermer le formulaire.
Nous allons maintenant nous intéresser à la syntaxe de la
chaîne de connexion pour savoir comment il est possible no-
tamment de désigner le nom du serveur de façon dynamique.
CONNEXION DYNAMIQUE À UN SERVEUR
Pour réaliser une connexion dynamique à un serveur, il faut
pouvoir remplacer le nom du serveur dans la chaîne de con-
nexion par une variable transportant le nom du serveur.
● Ajouter un bouton Serveur sur le formulaire comme le
montre la figure ci-contre,
En cliquant sur ce dernier, une boîte de dialogue doit per-
mettre à l‛utilisateur de spécifier le nom du serveur auquel
se connecter pour récupérer les informations de la base de
données Northwind.
● Double cliquer sur le bouton Serveur de manière à basculer
en mode édition de code entre les bornes de la procédure
Private Sub Serveur_Click,
● Saisir la ligne suivante:
Private Sub Serveur_Click(ByVal sender As System.Object, ByVal e As
System.EventArgs) Handles Serveur.Click
QuelServ()
End Sub
La procédure QuelServ() est appelée, nous devons donc la créer.
Page 8ADO.Net S.R.
● Créer la procédure QuelServ() comme suit:
Private Sub QuelServ()
Dim Nomserv As String
Dim requete As String
Dim base As String
Dim objDa As SqlClient.SqlDataAdapter
Dim objDs As New Data.DataSet()
‘Récupère le nom du serveur pour la connexion
Nomserv = InputBox(“Veuillez spécifier le nom du serveur !”, “Nom serveur”,
“STEPHANE”)
‘Intègre ce nom de serveur dans la chaîne de connexion
base = “Initial Catalog=Northwind;Data source=” & Nomserv & “;User
Id=sa;Password=;”
requete = “SELECT * FROM Employees”
objDa = New SqlClient.SqlDataAdapter(requete, base)
Try
objDa.Fill(objDs)
Catch
MsgBox(“La connexion n’a pu être établie, Vérifiez le nom du serveur !”,
MsgBoxStyle.Exclamation, “Echec de connexion”)
Exit Sub
End Try
Dim compteur As Integer
For compteur = 0 To objDs.Tables(0).Rows.Count - 1
resultat.Text = resultat.Text & Chr(13) & Chr(10) & objDs.Tables(0).Rows(co
mpteur).Item(1)
Next
End Sub
Le mode d‛accès aux données est habituel. Ce qui change en revanche est commenté.
● Exécuter l’application,
● Cliquer sur le bouton Serveur et saisir le nom
du serveur (Votre ordinateur),
Comme vous le constatez, les noms des employés
de la base Northwind sont effectivement ex-
traits comme précédemment. Mais cette fois
le nom du serveur pour la connexion est établi
dynamiquement.
Page 9ADO.Net S.R.
● Cliquer de nouveau sur le bouton Serveur,
● Saisir cette fois un nom de serveur arbitraire n’existant pas sur le réseau, puis valider,
Le message que nous avions prévu dans la branche Catch s‛affiche.
● Refermer le formulaire.
Maintenant que nous savons nous connecter dynamiquement à un serveur, voyons comment il est
possible de créer une base de données des serveurs disponibles sur le réseau et de les proposer
par ordre chronologique de dernier accès, à l‛utilisateur.
MISE EN OEUVRE
La figure ci-contre propose le résultat à obtenir.
Au chargement, le programme propose une lis-
te des serveurs classés par ordre de dernier
accès. Le bouton Nouveau permet d‛ajouter un
nouveau serveur à la liste. Le bouton Serveur
quant à lui permet d‛extraire dans la zone de
texte Resultat, la liste des noms des employés
de la b.d. Northwind, sur le serveur désigné
(Sélectionné dans la liste).
● Ajouter le bouton Nouveau sur le formulaire,
● Ajouter un contrôle ListBox que vous
nommez Liste et le placer sur la droite du
formulaire,
Vous pouvez de même ajouter deux contrôles GroupBox comme sur la figure pour améliorer la
présentation.
Nous devons maintenant créer une base de données des serveurs recensés.
Page 10ADO.Net S.R.
● Afficher l’explorateur de serveurs,
● Créer la base de données Serveurs,
● Ajouter à cette base la table LesServeurs
comme le propose la capture ci-contre,
Sur notre réseau, nous avons créé plusieurs serveurs virtuels en installant SQL Server 2000 sur
chacun de ces postes. Voyons comment récupérer la liste de ces serveurs au chargement du for-
mulaire.
● Double cliquer sur le formulaire en mode Design pour basculer en mode Edition de code entre les
bornes de la procédure Private Sub Form1_Load,
● Puis, saisir le code comme suit:
Private Sub ADO_Load(ByVal sender As System.Object, ByVal e As System.EventArgs)
Handles MyBase.Load
Dim requete As String ‘Chaîne de requête
Dim Base As String ‘Chaîne pour la base et le serveur...
Dim objDa As SqlClient.SqlDataAdapter
Dim objDs As New Data.DataSet()
Base = “Initial Catalog=Serveurs;Data Source=(LOCAL);User ID=sa;Password=;”
requete = “SELECT * FROM LesServeurs”
‘Initialise l’objet SqlDataReader avec les chaînes SQL et de connexion
objDa = New SqlClient.SqlDataAdapter(requete, Base)
‘Ouvre la connexion
objDa.Fill(objDs, “LesServeurs”)
Dim compteur As Integer
‘Un objet DataView crée une vue des données en mémoire à partir du
‘DataSet et permet de trier ces dernières sur une ou plusieurs colonnes
Dim objView As New DataView(objDs.Tables(“LesServeurs”))
‘La colonne acces est triée décroissant...
objView.Sort = “acces DESC, NomServeur”
‘... on récupère donc d’abord le dernier serveur accédé...
For compteur = 0 To objView.Table.Rows.Count - 1 ‘objDs.Tables(0).Rows.Count -
1
Liste.Items.Add(objView.Item(compteur).Row(0))
Next
‘Puis on sélectionne par défaut le premier élément de la liste
‘Soit le dernier serveur utilisé...
Try
Liste.SelectedIndex = 0
Catch
End Try
End Sub
Page 11ADO.Net S.R.
L‛accès aux données de la base Serveurs est classique, nous les chargeons en mémoire dans un
DataSet. Ce qui change est l‛utilisation de l‛objet DataView:
Dim objView As New DataView(objDs.Tables(“LesServeurs”))
objView.Sort = “acces DESC, NomServeur”
Celui-ci propose une ‘vue‛ des données et permet notamment de les trier avant de les manipuler.
Ainsi, la chaîne “acces DESC, NomServeur”, tri décroissant (DESC) les enregistrements sur la
date d‛accès. Ainsi c‛est le dernier accédé qui apparaît en tête de liste. Ensuite, la boucle For
compteur..., permet de charger toutes ces données triées dans le contrôle ListBox du formu-
laire.
A ce stade, bien que le code soit fonctionnel, la base de données est vide.
● Saisir quelques informations dans la base de données Serveurs,
● Puis, exécuter l’application pour tester le code,
● Refermer ensuite le formulaire.
LE BOUTON NOUVEAU
Ce bouton doit permettre d‛ajouter un nouveau serveur du réseau à la liste, et donc à la base de
données.
● Double cliquer sur le bouton Nouveau,
● Puis, saisir son code comme suit:
Private Sub Nouveau_Click(ByVal sender As System.Object, ByVal e As
System.EventArgs) Handles Nouveau.Click
Dim NServ As String
NServ = InputBox(“Nom du serveur”, “”)
Liste.Items.Add(NServ)
Try
Liste.SelectedIndex = Liste.Items.Count - 1
Catch
Try
Liste.SelectedIndex = 0
Catch
End Try
End Try
End Sub
Nous récupérons le nom du serveur par un InputBox, l‛ajoutons à la liste et le sélectionnons.
Page 12ADO.Net S.R.
● Exécuter l’application,
● Cliquer sur le bouton Nouveau,
● Saisir un nom arbitraire pour le serveur et valider.
Ce dernier apparaît en effet sélectionné dans le contrôle ListBox du formulaire.
● Refermer le formulaire.
Voyons maintenant comment se connecter à la base de données NorthWind du serveur sélec-
tionné.
● Double cliquer sur le bouton Serveur du formulaire,
● Saisir son code, comme suit:
Private Sub Serveur_Click(ByVal sender As System.Object, ByVal e As
System.EventArgs) Handles Serveur.Click
dyn()
End Sub
Au clic sur le bouton, nous appelons la procédure Dyn() que nous devons créer. C‛est elle qui doit
se charger de récupérer les données de la B.D.
● Saisir le code de la procédure Dyn() comme suit:
Private Sub dyn()
Dim requete As String ‘Chaîne de requête
Dim Base As String ‘Chaîne pour la base et le serveur...
Dim leServeur, laBase As String
Dim objDs As New Data.DataSet()
Dim objDA As SqlClient.SqlDataAdapter
‘Si aucun serveur sélectionné, on sort...
If Liste.SelectedItem = “” Then Exit Sub
leServeur = Liste.SelectedItem
‘Le nom du serveur récupéré dans la liste est concaténé à la chaîne de
connexion
Base = “Initial Catalog=Northwind;Data Source=” & leServeur & “;User
ID=sa;Password=;”
requete = “SELECT * FROM Employees”
‘L’objet DataAdapter est utilisé pour faire le lien entre la requete et la
chaîne de connexion
objDA = New SqlClient.SqlDataAdapter(requete, Base)
‘C’est lui qui remplit ensuite l’objet DataSet (Données en mémoire).
------------------------------------------------------------------------SUITE-->>
Page 13ADO.Net S.R.
Try
objDA.Fill(objDs)
Catch
‘Si une erreur est interceptée, la connexion au serveur n’est pas établie
MsgBox(“La connexion n’a pu être établie; vérifier le nom du serveur!”,
MsgBoxStyle.Exclamation, “Echec de connexion”)
Exit Sub
End Try
‘Appel de la procédure ajoutant le serveur et l’heure d’accès à la base
ajout(leServeur)
Dim compteur As Integer
‘Toutes les lignes (Rows(compteur)) de la deuxième colonne (Item(1)).
For compteur = 0 To objDs.Tables(0).Rows.Count - 1
resultat.Text = resultat.Text & Chr(13) & Chr(10) & objDs.Tables(0).Rows(co
mpteur).Item(1)
Next
End Sub
Nous récupérons tout d‛abord le nom du serveur sélectionné dans la liste du formulaire (leSer-
veur = Liste.SelectedItem). Nous accédons ensuite aux données de la table Employees de la
base Northwind de ce serveur en remplissant un DataSet. Si une erreur survient, nous l‛intercep-
tons et interprétons que la connexion n‛a pu être établie:
Try
objDA.Fill(objDs)
Catch
MsgBox(“La connexion n’a pu être établie; vérifier le nom du serveur!”,
MsgBoxStyle.Exclamation, “Echec de connexion”)
Exit Sub
Dans le cas contraire, avant de charger les noms des employés dans la zone de texte du formu-
laire, nous appelons la procédure Ajout. Cette dernière se charge d‛ajouter le nom du serveur
en question à la base de données des serveurs avec la date et l‛heure d‛accès. Nous devons donc
créer cette procédure. Notez que nous lui passons en paramètre le nom du serveur utilisé pour la
connexion.
Ensuite, la boucle For, passe en revue tous les enregistrements de la table, et charge les noms des
employés (Deuxième colonne, Item(1)), dans la zone de texte Resultat:
resultat.Text = resultat.Text & Chr(13) & Chr(10) & objDs.Tables(0).Rows(compteur).Item(1)
Occupons nous maintenant de la procédure réalisant la mise à jour de la base de données des ser-
veurs.
● Créer la procédure Ajout, comme sur la page suivante:
Page 14ADO.Net S.R.
Private Sub ajout(ByVal nomserv As String)
Dim requete1 As String
Dim base1 As String
Dim objDa1 As SqlClient.SqlDataAdapter
Dim objDs1 As New Data.DataSet()
‘Le commandBuilder est nécessaire lorsque l’on modifie les données
Dim objCB1 As SqlClient.SqlCommandBuilder
Dim objLigne As Data.DataRow
Dim compteur As Integer
Dim result As String
‘requête et connexion
base1 = “Initial Catalog=Serveurs;Data Source=(LOCAL);User Id=sa;Password=;”
requete1 = “SELECT * FROM LesServeurs”
objDa1 = New SqlClient.SqlDataAdapter(requete1, base1)
‘Initialise le CommandBuilder en le transmettant au DataAdapter
‘Cela crée les commandes Insert, Update, et delete du DataAdapter
objCB1 = New SqlClient.SqlCommandBuilder(objDa1)
objDa1.Fill(objDs1, “LesServeurs”)
Dim compteur1, ligne As Integer
For compteur1 = 0 To objDs1.Tables(0).Rows.Count - 1
Try
‘Si le serveur existe, l’enregistrement est supprimé et remplacé
‘par celui du dernier indice selon heure d’accès.
If objDs1.Tables(0).Rows(compteur1).Item(0) = nomserv Then
ligne = compteur1
objDs1.Tables(0).Rows(ligne).Delete()
Exit For
End If
Catch
End Try
Next
‘Après suppression, ajout du nouveau serveur...
objLigne = objDs1.Tables(“LesServeurs”).NewRow
objLigne(0) = nomserv
objLigne(1) = System.DateTime.Now
objDs1.Tables(“LesServeurs”).Rows.Add(objLigne)
Try
objDa1.Update(objDs1, “LesServeurs”)
Catch
End Try
End Sub
Page 15ADO.Net S.R.
Cette procédure accède aux données de la base serveurs de façon classique en remplissant un
DataSet. Le changement fondamental est la présence d‛un objet CommandBuilder qui permet la
modification des données.
La boucle passe en revue tous les noms de serveurs existant pour les comparer à celui passé en
argument, soit sélectionné dans la liste. S‛il existe, l‛enregistrement est supprimé, puis remplacé
par le nouveau avec la date d‛accès à jour, plus bas dans le code:
‘Après suppression, ajout du nouveau serveur...
objLigne = objDs1.Tables(“LesServeurs”).NewRow
objLigne(0) = nomserv
objLigne(1) = System.DateTime.Now
objDs1.Tables(“LesServeurs”).Rows.Add(objLigne)
● Exécuter l’application,
● Cliquer sur le bouton Nouveau,
● Saisir un nom de serveur de votre réseau,
● Cliquer sur le bouton Serveur,
Si le nom est correcte, la connexion est établie et les données extraites. Le cas échéant, un mes-
sage s‛affiche.
Page 16Vous pouvez aussi lire