DataRelation из одного запроса - PullRequest
0 голосов
/ 05 апреля 2009

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

    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 с четырьмя таблицами и тремя связями данных из этого одного запроса?

Спасибо

1 Ответ

1 голос
/ 05 апреля 2009

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

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

...