Newsgroup: it.comp.lang.visual-basic
Titolo: Ri-leggere dati da db

Ciao a tutti.
 
Ho scritto una applicazione in 
vb.net
 (windows form) nella quale alla 
pressione di un bottone vado a leggere una tabella su un db e mostro a 
video un riassunto del contenuto.
 
Ora, il problema è che da quando faccio partire la mia applicazione la 
form di riepilogo dati mi mostra sempre gli stessi dati, anche se nel 
frattempo sul db sono cambiati. Penso che dipenda dal fatto che .net 
lavora disconnesso (giusto?) ... ho provato anche a fare un dispose 
della connessione prima di aprire la finestra di riepilogo ma non funziona.
 
Se invece chiudo e riapro la mia appplicazione tutto funziona correttamente.
 
Qualcuno mi può aiutare?
 
grazie, ciao
Mauro
 
Il codice che utilizzo è il seguente (scrivo il minimo indispensabile, 
se serve altro chiedete pure):
 
Dim sql As String = "select * from magazzino"
dt = db.query_to_datatable(sql)
[ ... stampo a video il contenuto di dt ... ]
 
Public Function query_to_datatable(ByVal sql As String, Optional ByVal 
echo As Boolean = False) As DataTable
         Dim dt As New DataTable
         Try
             conn.Open()
             cmd.CommandText = sql
 
             Dim dr As MySqlDataReader = cmd.ExecuteReader
             dt.Load(dr)
             dr.Close()
 
             conn.Close()
             Return dt
         Catch ex As MySqlException
             If debug Then
                 MsgBox("DbUty::Impossibile eseguire la query." & vbCrLf _
                        & sql & vbCrLf & ex.Message.ToString)
             End If
             conn.Close()
             Return Nothing
         End Try
 
     End Function

 Ciao a tutti.
 
In quale evento hai inserito la lettura da db e la sua visualizzazione? 
 

 In quale evento hai inserito la lettura da db e la sua visualizzazione?
 
OnClick del pulsante "Cerca" .. in realtà ci sono un paio di passaggi di 
mezzo, non credo che c'entrino ma ti incollo il codice:
 
frmDettagli.vb
 
Private Sub btnCerca_Click(ByVal sender As System.Object, ByVal e As 
System.EventArgs) Handles btnCerca.Click
         cerca_dettagli()
	[ ... ]
End Sub
 
Private Sub cerca_dettagli()
    cerca_foglio()
    [ ... ]
End Sub
 
Private Sub cerca_foglio()
     [ ... ]
     ' Ricarico di dati dal database
     main.magazzino.carica_da_db()
     [ ... ]
End Sub
 
 
main è la form principale da cui questa (frmDettagli) è stata aperta
magazzino è una mia classe dentro cui si trova la funzione che fa la 
chiamata che ho indicato nel post precedente:
 
magazzino.vb
 
Public Sub carica_da_db()
 
     Dim sql As String = "select * from magazzino"
     dt = db.query_to_datatable(sql, True)
 
     For Each row In dt.Rows
     [ ... ]
End sub
 
La tua domanda mi ha fatto riflettere, non è che devo in qualche modo 
"refreshare" l'oggetto magazzino piuttosto che la connessione al db?
 
grazie, ciao
Mauro

 Se invece chiudo e riapro la mia appplicazione tutto funziona correttamente.
 
Il "disconnesso" di .NET non vuole soltanto dire che la connessione viene chiusa, ma che l'oggetto in cui hai caricato i dati (DataTable nel tuo caso) è completamente trasparente rispetto alla connessione al DB.
Nel tuo esempio a maggior ragione, visto che hai attinto ai dati con un DataReader che è un oggetto forward-only (una volta fatta la passata di lettura, si butta....)
 
Quindi si, devi preoccuparti tu di aggiornare la visualizzazione dei dati... a seconda di quello che vuoi fare, e della quantità di dati, potrebbe essere più comodo transitare da un DataAdapter invece che da un DataReader in modo da poterlo riutilizzare più rapidamente.

 Quindi si, devi preoccuparti tu di aggiornare la visualizzazione dei dati...
 > a seconda di quello che vuoi fare, e della quantità di dati, potrebbe
 > essere più comodo transitare da un DataAdapter invece che da un
 > DataReader in modo da poterlo riutilizzare più rapidamente.
 
Ok, ma come faccio a farlo?
 
I dati sono pochi, sono 168 righe di database con 4 colonne numeriche, 
ma io devo fargli rileggere i dati *dal database* ogni volta che un 
utente clicca sul pulsante cerca, perchè è quasi certo che ogni volta 
che un utente clicca su quel pulsante i dati sul db sono cambiati.
 
Come detto ho già provato a chiudere la connessione al db, fare un 
dispose, riaprirla e rifare la query ma i dati non li aggiorna.
 
Grazie per qualsiasi suggerimento!
 
ciao
Mauro