2009-04-04 7 views
0

i ont la pièce de code suivante VB.NET:DataRelation à partir d'une seule requête

Dim conn As New MySql.Data.MySqlClient.MySqlConnection(ConnectionString) 
    conn.Open() 

    Dim sql = "SELECT * FROM users" 
    Dim com = New MySql.Data.MySqlClient.MySqlCommand(sql, conn) 

    Dim ds As New DataSet("dsUsers") 

    Dim da As New MySql.Data.MySqlClient.MySqlDataAdapter() 
    da.SelectCommand = com 
    da.TableMappings.Add("Table", "Users") 
    da.Fill(ds) 

    sql = "SELECT * FROM messages" 
    com = New MySql.Data.MySqlClient.MySqlCommand(sql, conn) 

    Dim da2 As New MySql.Data.MySqlClient.MySqlDataAdapter() 
    da2.SelectCommand = com 
    da2.TableMappings.Add("Table", "Messages") 
    da2.Fill(ds) 

    Dim dr As DataRelation 
    Dim col1 As DataColumn 
    Dim col2 As DataColumn 

    col1 = ds.Tables("Users").Columns("id") 
    col2 = ds.Tables("Messages").Columns("users_id") 
    dr = New DataRelation("UsersMessages", col1, col2) 

    ds.Relations.Add(dr) 

Fondamentalement, j'exécute deux requêtes: le premier va chercher tous les utilisateurs, le second tous les messages. Je définis deux tables dans un DataSet et les lient à travers une DataRelation afin que la table Users soit un parent de la table Messages.

Cela fonctionne si je veux sélectionner toutes les lignes des deux tables, mais que faire si j'ai une structure plus complexe avec 4 tables imbriquées et des requêtes conditionnelles?

SELECT t1.*, t2*, t3.*, t4.* 
FROM table1 t1, table2 t2, table3 t3, table4 t4 
WHERE t1.id = 3 
     AND t2.t1_id = t1.id 
     AND t3.t2_id = t2.id 
     AND t4.t3_id = t3.id 

Comment puis-je créer un DataSet avec quatre tables et les trois DataRelations de cette seule requête?

Merci

Répondre

1

La seule façon de le faire serait d'écrire du code qu'il fait, à savoir créer des tables dans l'ensemble de données, mettre en place les relations entre les tables et remplir les tables avec certains champs du résultat.

Il n'y a pas de méthode automatique, car il n'y a aucune information dans le résultat sur la provenance de chaque champ, ou même sur les tables qui ont été interrogées pour obtenir le résultat.

Questions connexes