2009-04-04 1 views
0

У меня есть следующий фрагмент кода VB.NET:DataRelation из одного запроса

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) 

В принципе, я выполнить два запроса: первый получает все пользователи, вторые все сообщения. Я определяю две таблицы в DataSet и свяжу их через DataRelation, чтобы таблица Users была родителем таблицы Messages.

Это работает, если я хочу выбрать все строки из двух таблиц, но что, если у меня есть более сложная структура с 4 вложенными таблицами и условными запросами?

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 

Как я могу создать DataSet с четырьмя столами и тремя DataRelations из этого одного запроса?

Благодаря

ответ

1

Единственный способ сделать это было бы написать код, который делает это, то есть создавать таблицы в наборе данных, установить отношения между таблицами и заполнением таблиц с некоторыми полями из результата.

Нет автоматического способа сделать это, так как в результате нет информации о том, из какой таблицы приходит каждое поле, или даже какие таблицы были запрошены для получения результата.

 Смежные вопросы

  • Нет связанных вопросов^_^