Secondo me è il DataAdapter. Io uso sempre lo stesso codice, adattandolo di volta in volta e così funziona sempre, indipendentemente da che cosa debba fare sul DB.

Dim dsXXX As New DataSet()
Dim cmdXXX As New SqlCommand(sql, Conn)
Dim daXXX As New SqlDataAdapter
daXXX.SelectCommand = cmdXXX
Dim cbXXX As New SqlCommandBuilder(daXXX)
daXXX.Fill(dsXXX, "tblXXX")
Dim tblXXX As DataTable = dsXXX.Tables("tblXXX")