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?