L ACCÈS AUX DONNÉES AVEC ADO.NET - S.R.

La page est créée Françoise Marechal
 
CONTINUER À LIRE
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