none
Utilisation de l'objet DataRelation RRS feed

  • Discussion générale

  • L'objet DataRelation permet de travailler avec des DataTable liés.
    Dans notre exemple, nous avons 2 tables qui sont reliées par la colonne JOB_ID : JOBS est la table parent et EMPLOYEES, la table enfant.

    La signature de DataRelation que nous avons utilisée est :
    DataRelation("NomdelaRelation" String ,ColonneParent DataColumn, ColonneEnfant DataColumn)

    Pour récupérer les lignes enfants d'une ligne parent, nous utilisons la méthode GetChildRows de l'objet DataRow. ( DataRow.GetChildRows("
    NomdelaRelation" String))

    Dim MaChaineDeConnection As String = "Data Source=XE;" + _
    "User ID=HR;Password=test;"

    Dim MaConnexion As OracleConnection = New OracleConnection(MaChaineDeConnection)

    Dim RequetePersonnes As String = "select LAST_NAME Nom, " + _
    "FIRST_NAME Prenom, " + _
    "SALARY Salaire, " + _
    "EMAIL Email, " + _
    "HIRE_DATE Embauche, " + _
    "JOB_ID JobId " + _
    "from EMPLOYEES"

    Dim RequeteJobs As String = "Select JOB_ID JobId," + _
    "JOB_TITLE Fonction " + _
    "from JOBS"

    Dim DataAdapterPersonnes As New OracleDataAdapter(RequetePersonnes, MaConnexion)
    Dim DataAdapterJobs As New OracleDataAdapter(RequeteJobs, MaConnexion)

    Dim MonDataSet As New DataSet
    DataAdapterPersonnes.Fill(MonDataSet, "Personnes")
    DataAdapterJobs.Fill(MonDataSet, "Fonctions")

    Dim TablePersonnes As DataTable = MonDataSet.Tables("Personnes")
    Dim TableFonctions As DataTable = MonDataSet.Tables("Fonctions")

    Dim FonctionsToPersonnes As DataRelation
    FonctionsToPersonnes = New DataRelation("FonctionsToPersonnes", TableFonctions.Columns("JobId"), TablePersonnes.Columns("JobId"))
    MonDataSet.Relations.Add(FonctionsToPersonnes)

    For Each Fonctions As DataRow In TableFonctions.Rows
       Console.WriteLine(vbCrLf + "Fonction : " + Fonctions("Fonction"))
       For Each Personnes As DataRow In Fonctions.GetChildRows("FonctionsToPersonnes")
          Console.WriteLine(vbTab + Personnes("Prenom") + " " + Personnes("Nom"))
       Next Personnes
    Next Fonctions

    Résultat :
    Fonction : President
       Steven King

    Fonction : Administration Vice President
       Neena Kochhar
       Lex De Haan

    Fonction : Administration Assistant
       Jennifer Whalen

    Fonction : Finance Manager
       Nancy Greenberg

    Fonction : Accountant
       Daniel Faviet
       John Chen
       Ismael Sciarra
       Jose Manuel Urman
      Luis Popp
    ...

    L'objet DataRelation facilite la gestion des données liées. Il supporte les modifications en cascade, peut être créé n'importe quand et gère des mises à jour complexes.
    dimanche 10 septembre 2006 08:13

Toutes les réponses

  • Dans notre précédent exemple, nous avons utilisé la méthode GetChildRows de l'objet DataRow pour visualiser toutes les lignes enfants. Nous appelons cette méthode une navigation vers le bas.
    Nous pouvons cependant vouloir faire l'inverse, soit une navigation vers le haut pour consulter les lignes parents. Nous utiliserons donc pour ce faire, la méthode GetParentRows de la manière suivante.

    For Each Personnes As DataRow In TablePersonnes.Rows
       For Each Fonctions As DataRow In Personnes.GetParentRows("NomdelaRelation")
          Console.WriteLine(Personnes("Prenom") + " " + Personnes("Nom") + Fonctions("Fonction"))
       Next Fonctions
    Next Personnes

    dimanche 10 septembre 2006 11:46
  • Maintenant que nous savons naviguer vers le haut et vers le bas dans nos données hiérarchisées, nous allons voir comment utiliser les méthodes GetParentRows et GetChildRows pour consulter des informations se trouvant dans plusieurs tables liées (relation 1-n).

    Dans notre exemple nous utilisons les structures suivantes :
    Departments > Employees < Jobs
    Il se peut qu'il n'y est pas d'employé dans un département et par conséquent, nous ne l'afficherons pas.

    Dans l'exemple précédent nous allons rajouter les déclarations et instructions suivantes :

    Dim RequeteDepartments As String = "Select DEPARTMENT_ID DepartmentId," + _
                                                                                   "DEPARTMENT_NAME Department " + _
                                                                          "from DEPARTMENTS"

    Dim DataAdapterDepartments As New OracleDataAdapter(RequeteDepartments, MaConnexion)
    DataAdapterDepartments.Fill(MonDataSet, "Departements")
    Dim TableDepartments As DataTable = MonDataSet.Tables("Departements")

    Dim DepartmentsToPersonnes As DataRelation
    DepartmentsToPersonnes = New DataRelation("DepartmentsToPersonnes", TableDepartments.Columns("DepartmentId"), TablePersonnes.Columns("DepartmentId"))
    MonDataSet.Relations.Add(DepartmentsToPersonnes)

    Dim job As DataRow
    For Each Departement As DataRow In TableDepartments.Rows
       If Departement.GetChildRows("DepartmentsToPersonnes").Length > 0 Then
           Console.WriteLine(vbCrLf + Departement("Department"))
           For Each personne As DataRow In Departement.GetChildRows("DepartmentsToPersonnes")
              job = personne.GetParentRow("FonctionsToPersonnes")
              Console.WriteLine(vbTab + personne("Nom") + " " + personne("Prenom") + " " + job("Fonction"))
           Next personne
       End If

    Next Departement

    Résultats :
    Administration
       Whalen Jennifer Administration Assistant

    Marketing
        Hartstein Michael Marketing Manager
        Fay Pat Marketing Representative

    Purchasing
       Raphaely Den Purchasing Manager
       Khoo Alexander Purchasing Clerk
       Baida Shelli Purchasing Clerk
       Tobias Sigal Purchasing Clerk
       Himuro Guy Purchasing Clerk
       Colmenares Karen Purchasing Clerk

    dimanche 10 septembre 2006 14:23