Da qualche giorno ho installato visual studio 2010 per convertire uma mia applicazione da vb6 a vbNet.

Sinceramente credevo che la cosa fosse meno complessa.

Praticamente devo rivedere tutto il codice; e fin qui poco male (anche se si tratta di decine di migliaia di righe), ma il problema secondo me è l'accesso ai database. L'approccio credo sia totalmente diverso e per una gestione dei dati sul proprio PC, inutilmente macchinoso e lento (dai primi tentativi fatti).
----------------------------------------------------------------------------------------------------------------------------------------------------------------------------
Con il vecchio VB6 dopo aver aperto il database con:

Set dbsMusica = OpenDatabase(PathDB & "\Musica.mdb")

Leggo la tabella rstAlbum e con l' istruzione Seek punto subito al recordo che cerco e leggo e trattto tutti i campi che voglio . Inoltre possso disporre delle istruzioni AddNew Delete Update ecc.
Inoltre con un loop Do While True posso continuare a scorrere i record fino a che voglio. L' accesso al record è praticamente immediato e l' applicazione, nonostante centinaia di letture non ne risente.

Private Sub LeggiBrano()
Trovato = False
Set rstBrani = dbsMusica.OpenRecordset("Brani", dbOpenTable)
With rstBrani
.Index = "IDBra"
.Seek "=", KeyBrano
If .NoMatch Then Exit Sub
Trovato = True
NomeBrano = !BraTitolo
BraNumBrano = !BraNumBra
.Close
End With
End Sub
----------------------------------------------------------------------------------------------------------------------------------------------------------------------------
Questo il tentativo fatto in vb2010.

Private Sub TrovaConExecuteReader2()
Dim PercorsoDB As String =(PathDB & "\Musica.mdb")
Dim ConnString As String = "Provider= Microsoft.Jet.OLEDB.4.0; " & "Data Source =" & PercorsoDB
Dim Cn As New OleDbConnection(ConnString)
Dim dr As OleDbDataReader
Dim cmd As OleDbCommand
Dim SqlString As String

Cn.Open()
SqlString = "SELECT [BraTitolo] FROM Brani WHERE IDBra = 1"
cmd = New OleDb.OleDbCommand(SqlString, Cn)
dr = cmd.ExecuteReader()
If dr.Read() Then
NomeBrano = dr.Item("BraTitolo").ToString()
End If
Cn.Close()
End Sub


Funziona, ma è sicuramente più lento. Forse perchè la connessione col DB viene chiusa ogni volta?
Il metodo ExecuteReader è corretto?
Considerando che i programmi dell' applicazione necessitano di continui accessi alle diverse tabelle si può tenere aperta una connessione fino alla chiusura dell'applicazione?


P.S.
L'applicazione su cui dovrei lavorare è visibile in questi due link di presentazione

https://youtu.be/4SXhPb-ck2s
https://youtu.be/f-xSW86Muog

Chi volesse può anche approfondire l' argomento, c' è un altro thread aperto (DBM Player)