Заполнение нескольких таблиц в наборе данных?

У меня проблема с моим кодом, который заполняет несколько таблиц в моем dataset. Он загружает все содержимое таблиц моей базы данных только в одну таблицу в dataset. Мой код показан ниже. Как загрузить эти таблицы из базы данных в набор данных с таким же количеством таблиц и содержимого.

Private Sub Filldataset()
Private cnn As OleDbConnection
Private dt As New DataTable
Private da As New OleDbDataAdapter
Private cmd As New OleDbCommand
Private ds As New DataSet
    Dim tblrestrictions As String() = New String() {Nothing, Nothing, Nothing, "TABLE"}
    Dim userTables As DataTable = Nothing
    userTables = cnn.GetSchema("Tables", tblrestrictions)
    Dim i As Integer
    For i = 1 To userTables.Rows.Count - 1 Step 1
        cnn = New OleDbConnection(Str)
        cnn.Open()
        cmd = cnn.CreateCommand
        cmd.CommandText = "select * from" & " " & userTables.Rows(i)(2).ToString
        dt.Clear()
        da.SelectCommand = cmd
        da.Fill(dt)
        da.Fill(ds)
    Next
    cnn.Close()
    MessageBox.Show(ds.Tables.Count)
End Sub

person An Nguyễn    schedule 25.03.2018    source источник
comment
Вам нужно открыть соединение перед вызовом GetSchema(). Вы очищаете и пополняете одну и ту же таблицу данных (dt). Вам не нужен da.Fill(dt)   -  person Mary    schedule 25.03.2018
comment
Я уже открываю соединение в основном классе. Он проходит через базу данных и выбирает каждую таблицу данных для заполнения набора данных. Но это не удается. Можете ли вы дать решение для этого? Большое спасибо   -  person An Nguyễn    schedule 26.03.2018


Ответы (1)


Соединения могут быть созданы в другом месте, но не должны открываться или закрываться до тех пор, пока вы их не используете. Вам придется настроить этот код для приложения Oledb.

Private Sub GetData()
        cn.Open()
        Dim dt As DataTable = cn.GetSchema("Tables")
        cn.Close()
        Dim ds As New DataSet
        Dim row As DataRow
        For Each row In dt.Rows
            Dim strTableName As String = row(2).ToString
            Dim strSQL As String = "Select * From " & strTableName
            Dim cmd As New SqlCommand(strSQL, cn)
            Dim da As New SqlDataAdapter
            da.SelectCommand = cmd
            da.Fill(ds, strTableName)
        Next
        Debug.Print(ds.Tables.Count.ToString)
End Sub

Я локально определил несколько переменных, которые вы захотите применить к классу, например к набору данных.

person Mary    schedule 26.03.2018
comment
Извиняюсь. Я новый член. - person An Nguyễn; 27.03.2018