Ciao a tutti!

Ho fatto un progetto di esempio in visual studio, dove ho il mio form e due tasti, il primo mi inserisce un nuovo record nel db e il secondo mi legge tutti i record.

Ecco il codice

codice:
Imports System.Data.OleDb
Imports System.Windows.Forms


Public Class Form1


    Dim ConnString As String        'DICHIARAZIONE PERSCORSO
    Dim Cn As OleDbConnection       'DICHIARAZIONE CONNESSIONE
    Dim sql As String                    'DICHIARO VARIABILE PER QUERY
    Dim cmd As OleDbCommand         'DICHIARO LA VARIABILE CHE ESEGUE LA QUERY
    Dim dr As OleDbDataReader        'DICHIARO VARIABILE CHE LEGGE IL RISULTATO DELLA QUERY


    Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
        'IMPOSTO LA CONNESSIONE AL DB
        ConnString = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=D:\Clienti\...\MDB\db.mdb;Persist Security Info=False"

    End Sub

    Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
        'AGGIORNO IL DB
        Cn = New OleDbConnection(ConnString)        'CREO LA NUOVA CONNESSIONE
        If Cn.State = ConnectionState.Open Then Cn.Close() 'SE LA CONNESSIONE è GIà APERTA LA CHUDO
        Cn.Open()                               'APRO LA CONNESSIONE

        sql = "INSERT INTO TABELLA (perito) VALUES ('" & TextBox1.Text & "');"       'SCRIVO LA QUERY

        cmd = New OleDbCommand(sql, Cn)         'IMPOSTO LA QUERY CON LA CONNESSIONE
        cmd.ExecuteNonQuery()



        Cn.Close()

    End Sub

    Private Sub Button2_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button2.Click

        'LEGGO I RECORD


        Cn = New OleDbConnection(ConnString)        'CREO LA NUOVA CONNESSIONE
        If Cn.State = ConnectionState.Open Then Cn.Close() 'SE LA CONNESSIONE è GIà APERTA LA CHUDO
        Cn.Open()                               'APRO LA CONNESSIONE

        sql = "SELECT perito FROM TABELLA"       'SCRIVO LA QUERY



        cmd = New OleDbCommand(sql, Cn)         'IMPOSTO LA QUERY CON LA CONNESSIONE
        dr = cmd.ExecuteReader                  'ESEGUO LA QUERY E SCRIVO I RECORD DENTRO AL DATAREADER

        If dr.HasRows = True Then
            'CONTIENE ALMENO UN RECORD
        Else
            'è VUOTO
        End If



        Do While dr.Read()


            If dr.IsDBNull(0) Then
                MsgBox("ok")
            Else

                MsgBox(dr.Item(0))

            End If
        Loop


        Cn.Close()

ho dichiarato nel generale le variabili di connessione, poi nel form ho impostato il percorso del db e nei singoli tasti eseguo la query.
Funziona perfettamente pero ho alcune cose da chiedere.

Quando eseguo le query con le seguenti istruzioni
cmd = New OleDbCommand(sql, Cn)
dr = cmd.ExecuteReader

questi oggetti cmd e dr si possono svuotare?
se non li svuoto occupano memoria?
quando conviene usare il dataset o datatable?

Putroppo sono nuovo di VB.NET ho sempre programmato in vb6 e sto cercando di capire!

Grazie