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 1
ADO.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 2
ADO.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 3
ADO.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 4
ADO.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 5
ADO.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 6
ADO.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 7
ADO.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 8
ADO.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 9
ADO.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 10
ADO.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 11
ADO.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 12
ADO.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 13
ADO.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 14
ADO.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 15
ADO.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 16
Vous pouvez aussi lire