Visualizzazione dei risultati da 1 a 9 su 9
  1. #1

    [VB.NET] DB Access che rimane aperto dopo comando di chiusura

    Ciao a tutti,
    mi succede una cosa strana, come da titolo del Thread dopo aver lanciato il comando di chiusura di un DB access mi rimane il file .ldb
    E' come se il DB non sia stato chiuso.

    Per connettermi utilizzo il seguente codice:

    codice:
    Dim strconn As String
    strconn = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" & MyPath & "\" & NomeDB
    conn = New OleDbConnection(strconn)
    conn.Open()
    Per disconnettermi utilizzo il seguente codice:

    codice:
    conn.Close()
    conn.Dispose()
    La cosa strana è che per la maggior parte del mio applicativo utilizzando la connessione e successivamente la disconnessione il problema non si presenta.

    Il problema si presenta quando effettuo un ciclo come questo:

    codice:
    'apre la connessione
            Connetti()
    
           'Query parametrizzata
    
                For cnt = 1 To 500
                    comm = New OleDbCommand("UPDATE Tag SET " & _
                                            "nPagina=@nPagina," & _
                                            "Visibile=@Visibile," & _
                                            "TipoDato=@TipoDato," & _
                                            "Titolo=@Titolo," & _
                                            "X=@X," & _
                                            "Y=@Y," & _
                                            "Larghezza=@Larghezza," & _
                                            "Altezza=@Altezza," & _
                                            "Trasparente=@Trasparente," & _
                                            "Bordo=@Bordo," & _
                                            "NomeFont=@NomeFont," & _
                                            "StileFont=@StileFont," & _
                                            "DimensioneFont=@DimensioneFont," & _
                                            "Allineamento=@Allineamento " & _
                                            "WHERE nTAG=@nTAG AND " & condizioneQUERY & ";", conn)
    
                    comm.Parameters.Add("@nPagina", OleDb.OleDbType.VarChar).Value = frmTAG.txtNPagina.Text
                    comm.Parameters.Add("@Visibile", OleDb.OleDbType.Boolean).Value = frmTAG.Visibile(cnt)
                    comm.Parameters.Add("@TipoDato", OleDb.OleDbType.VarChar).Value = frmTAG.TipoDato(cnt)
                    comm.Parameters.Add("@Titolo", OleDb.OleDbType.VarChar).Value = frmTAG.Titolo(cnt)
                    comm.Parameters.Add("@X", OleDb.OleDbType.VarChar).Value = frmTAG.X(cnt)
                    comm.Parameters.Add("@Y", OleDb.OleDbType.VarChar).Value = frmTAG.Y(cnt)
                    comm.Parameters.Add("@Larghezza", OleDb.OleDbType.VarChar).Value = frmTAG.Larghezza(cnt)
                    comm.Parameters.Add("@Altezza", OleDb.OleDbType.VarChar).Value = frmTAG.Altezza(cnt)
                    comm.Parameters.Add("@Trasparente", OleDb.OleDbType.Boolean).Value = frmTAG.Trasparente(cnt)
                    comm.Parameters.Add("@Bordo", OleDb.OleDbType.Boolean).Value = frmTAG.Bordo(cnt)
                    comm.Parameters.Add("@NomeFont", OleDb.OleDbType.VarChar).Value = frmTAG.NomeFont(cnt)
                    comm.Parameters.Add("@StileFont", OleDb.OleDbType.VarChar).Value = frmTAG.StileFont(cnt)
                    comm.Parameters.Add("@DimensioneFont", OleDb.OleDbType.VarChar).Value = frmTAG.DimensioneFont(cnt)
                    comm.Parameters.Add("@Allineamento", OleDb.OleDbType.VarChar).Value = frmTAG.Allineamento(cnt)
                    comm.Parameters.Add("@nTAG", OleDb.OleDbType.VarChar).Value = cnt
    
                    comm.ExecuteNonQuery()
                Next
            End If
    
            'chiude la connessione al database
            Disconnetti()
    Altra info: se i cicli FOR li diminuisco a 100 non ho più il problema

    Avete idee ???

    Grazie, BOC

  2. #2
    Utente di HTML.it L'avatar di albgen
    Registrato dal
    Jun 2005
    Messaggi
    3,249
    non è che per caso va in errore?
    comunque il modo migliore è quella di utilizzare i tableadapter e non fare un ciclo.
    Vedrai un incredibile miglioramento delle performance nonchè non avrai piu i problemi di connessione.
    I got the remedy

  3. #3
    Ciao Albgen,
    Grazie mille per la risposta.
    L'applicazione non mi va in errore, semplicemente non mi chiude il DB.
    Proveró sicuramente il tableadapter che mi hai suggerito.
    Ancora grazie, Boc.

  4. #4
    Utente di HTML.it L'avatar di alpynet
    Registrato dal
    Mar 2010
    Messaggi
    123
    Ciao, l'inizializzazione dell'oggetto command, e relativi parametri, ti conviene farla fuori dal ciclo.
    codice:
    .....
                comm = New OleDbCommand("UPDATE Tag SET " & _
                                            "nPagina=@nPagina," & _
                                            "Visibile=@Visibile," & _
                                            "TipoDato=@TipoDato," & _
                                            "Titolo=@Titolo," & _
                                            "X=@X," & _
                                            "Y=@Y," & _
                                            "Larghezza=@Larghezza," & _
                                            "Altezza=@Altezza," & _
                                            "Trasparente=@Trasparente," & _
                                            "Bordo=@Bordo," & _
                                            "NomeFont=@NomeFont," & _
                                            "StileFont=@StileFont," & _
                                            "DimensioneFont=@DimensioneFont," & _
                                            "Allineamento=@Allineamento " & _
                                            "WHERE nTAG=@nTAG AND " & condizioneQUERY & ";", conn)
    
                comm.Parameters.Add("nPagina", OleDb.OleDbType.VarChar)
                comm.Parameters.Add("Visibile", OleDb.OleDbType.Boolean)
                comm.Parameters.Add("TipoDato", OleDb.OleDbType.VarChar)
                comm.Parameters.Add("Titolo", OleDb.OleDbType.VarChar)
                comm.Parameters.Add("X", OleDb.OleDbType.VarChar)
                comm.Parameters.Add("Y", OleDb.OleDbType.VarChar)
                comm.Parameters.Add("Larghezza", OleDb.OleDbType.VarChar)
                comm.Parameters.Add("Altezza", OleDb.OleDbType.VarChar)
                comm.Parameters.Add("Trasparente", OleDb.OleDbType.Boolean)
                comm.Parameters.Add("Bordo", OleDb.OleDbType.Boolean)
                comm.Parameters.Add("NomeFont", OleDb.OleDbType.VarChar)
                comm.Parameters.Add("StileFont", OleDb.OleDbType.VarChar)
                comm.Parameters.Add("DimensioneFont", OleDb.OleDbType.VarChar)
                comm.Parameters.Add("Allineamento", OleDb.OleDbType.VarChar)
                comm.Parameters.Add("nTAG", OleDb.OleDbType.VarChar)
    
                For cnt = 1 To 500
                    comm.Parameters("nPagina").Value = frmTAG.txtNPagina.Text
                    comm.Parameters("Visibile").Value = frmTAG.Visibile(cnt)
                    comm.Parameters("TipoDato").Value = frmTAG.TipoDato(cnt)
                    comm.Parameters("Titolo").Value = frmTAG.Titolo(cnt)
                    comm.Parameters("X").Value = frmTAG.X(cnt)
                    comm.Parameters("Y").Value = frmTAG.Y(cnt)
                    comm.Parameters("Larghezza").Value = frmTAG.Larghezza(cnt)
                    comm.Parameters("Altezza").Value = frmTAG.Altezza(cnt)
                    comm.Parameters("Trasparente").Value = frmTAG.Trasparente(cnt)
                    comm.Parameters("Bordo").Value = frmTAG.Bordo(cnt)
                    comm.Parameters("NomeFont").Value = frmTAG.NomeFont(cnt)
                    comm.Parameters("StileFont").Value = frmTAG.StileFont(cnt)
                    comm.Parameters("DimensioneFont").Value = frmTAG.DimensioneFont(cnt)
                    comm.Parameters("Allineamento").Value = frmTAG.Allineamento(cnt)
                    comm.Parameters("nTAG").Value = cnt
                    
                    comm.ExecuteNonQuery()
                Next

  5. #5
    Utente di HTML.it L'avatar di albgen
    Registrato dal
    Jun 2005
    Messaggi
    3,249
    @alpynet:hai provato il codice che hai postato?
    I got the remedy

  6. #6
    Utente di HTML.it L'avatar di alpynet
    Registrato dal
    Mar 2010
    Messaggi
    123
    Originariamente inviato da albgen
    @alpynet:hai provato il codice che hai postato?
    Ciao, certo che l'ho provato!
    Logicamente io non ho provato con i dati che ha lui, in quanto non conosco la sua struttura del programma e db.
    Comunque il mio era solo un consiglio e preciso che non ho controllato se la sintassi sia giusta...ma visto che gli funziona tutto (l'unico problema sembra sia dovuto dal fatto che gli rimane aperto il db) presumo che sia ok

  7. #7

  8. #8
    Grazie a tutti per le risposte,
    appena arrivo a casa provo le varie soluzioni e vi faccio sapere.
    Grazie ancora, BOC

  9. #9
    Il codice suggerito da alpynet funziona
    Il database viene correttamente chiuso.
    Pensandoci è strutturalmente più intelligente rispetto a quello postato da me
    Anche se, vi dico la verità, non capisco perchè così debba funzionare e nell'altro modo no.
    Naturalmente anche a livello di prestazioni l'applicativo è migliorato.
    Ho provato anche a fare 2000 cicli FOR ed il DB viene correttamente chiuso.

    Ho intenzione comunque di provare ad utilizzare il "tableadapter" come suggerito da Albgen per vedere se a livello di prestazioni miglioro ulteriormente.

    Anche in questo caso vi farò sapere.

    Grazie ancora a tutti.


    P.S. @Gibra, ho guardato il link che mi hai allegato, ma ci ho capito veramente poco
    Mea culpa !!!

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2025 vBulletin Solutions, Inc. All rights reserved.