Questo codice:

codice:
'dimensiono FUORI dal Try/Catch per disporne nel blocco Finally
'setto a nothing per non avere avviso di variabile con valore Null 
Dim dt As DataTable = Nothing
Dim DBconn As OleDbConnection = Nothing
Dim da As OleDbDataAdapter = Nothing
Dim ds As DataSet = Nothing
Dim DBcommand As OleDbCommandBuilder = Nothing

Try

     DBconn = New OleDbConnection("Provider=Microsoft.Jet.OLEDB.4.0; Data Source=" & Path)
     DBconn.Open()

     da = New OleDbDataAdapter("Select * From " & Tabella, DBconn)

     DBcommand = New OleDbCommandBuilder(da)

     ds = New DataSet
     da.FillSchema(ds, SchemaType.Source, Tabella)
     da.MissingSchemaAction = MissingSchemaAction.AddWithKey
     da.Fill(ds, Tabella)
     dt = New DataTable
     dt = ds.Tables(Tabella)

     Dim FoundRow As DataRow = Nothing

     '...............................................
     'ricerco e gestisco i dati
     '..............................................

Catch ex As Exception

     Debug.Print("Error.: " & ex.ToString)

Finally

      DBconn.Close()
      dt.Dispose()
      da.Dispose()
      ds.Dispose()
      DBcommand.Dispose()

End Try
funziona benissimo, senza errori. Però ho un avviso:

CA2000 : Microsoft.Reliability : Nel metodo 'FrmMain.LeggeDB()' chiamare System.IDisposable.Dispose sull'oggetto 'dt' prima che tutti i relativi riferimenti siano esterni all'ambito.

Eppure io ho ben messo dt.Dispose() nel blocco Finally, che viene letto COMUNQUE.

Nota:
- l' oggetto dt è l' unico che genera l' avviso
- ho provato a cambiare l' ordine dei membri del blocco Finally ma non cambia nulla...

Any idea?