Bene. Se il metodo deve restituire un datatable, io uso questo:

codice:
'-------------------------------------------------------------------------------------
'Restituisce un oggetto DataTable o lancia eccezione in caso di errore
'parametri: Stringa di connessione, stringa sql
'-------------------------------------------------------------------------------------
Public Function GetDataTable(stringaConnessione As String, stringaSQL As String) As DataTable

    Try
        'creo un nuovo DataAdapter
        Dim DataAdapter As New o.MySqlDataAdapter(stringaSQL, stringaConnessione)

        'creo un DataTable e lo riempio con i dati
        Dim DataTable As New DataTable
        'DataAdapter.FillSchema(DataTable, SchemaType.Source)
        DataAdapter.Fill(DataTable)

        Return DataTable

    Catch ex As System.Data.ConstraintException
        Try
            'creo un nuovo DataAdapter e provo senza caricare lo schema
            Dim DataAdapter As New o.MySqlDataAdapter(stringaSQL, stringaConnessione)

            'creo un DataTable e lo riempio con i dati
            Dim DataTable As New DataTable
            DataAdapter.Fill(DataTable)

            Return DataTable

        Catch ex1 As Exception
            Throw
        End Try

    Catch Errore As Exception
        Throw

    End Try


End Function
utile implementare la versione overload con questa firma
codice:
Public Function GetDataTable(connessione As o.MySqlConnection, stringaSQL As String) As DataTable