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

    Non si visualizza il Repeater

    ragazzi succede una cosa strana nel tentare di visualizzare un Repeater che pesca i dati da un db Access

    il problema è questo alla prima visualizzazione tutto ok viene visualizzato correttamente mentre la seconda volta non viene visualizzato nulla senza nemmeno nessun messaggio d'errore !
    inoltre tentando di aprire il file Access mi viene visualizzato il messaggio "File monete.mdb già in uso"
    cosa devo fare ?
    il codice per visualizzare i dati è perfettamente funzionante !
    dove può essere l'inghippo?

  2. #2
    Utente di HTML.it
    Registrato dal
    Aug 2002
    Messaggi
    151
    controlla se hai chiuso la connessione al db

  3. #3
    chiusa al 100% anche perchè utilizzo una funzione che uso da altre parti con successo

    public function SelectSQL(strSelect as string) as OleDbDataReader
    try
    objConn = new OleDbConnection(ConnectionString)
    objCmd = new OleDbCommand(strSelect, objConn)
    objCmd.Connection.Open
    return objCmd.ExecuteReader
    objCmd.Connection.Close()
    catch ex as OleDbException
    return nothing
    end try
    end function

  4. #4
    Utente di HTML.it
    Registrato dal
    Aug 2002
    Messaggi
    151
    Sicuro che chiude la connessione?
    Se capita un errore la connessione resta aperta e la procedura esce dalla funzione senza darti errore

    dovresti modificare

    objCmd.Connection.Close()
    catch ex as OleDbException
    return nothing
    end try

    in

    objCmd.Connection.Close()
    catch ex as OleDbException
    objCmd.Connection.Close()
    return nothing
    end try

  5. #5
    Utente di HTML.it
    Registrato dal
    May 2001
    Messaggi
    573
    Scusa... ma dalla mia grossa ignoranza sorge un dubbio con 3 b!

    Ma se tu usi quella funzione, quando fai:
    return objCmd.ExecuteReader

    esce dalla funzione e la connessione rimane aperta!
    ... o no...

    Ciao Elisa

  6. #6
    Utente di HTML.it L'avatar di pietro09
    Registrato dal
    Jan 2002
    Messaggi
    10,116
    Originariamente inviato da brutusin
    chiusa al 100% anche perchè utilizzo una funzione che uso da altre parti con successo

    public function SelectSQL(strSelect as string) as OleDbDataReader
    try
    objConn = new OleDbConnection(ConnectionString)
    objCmd = new OleDbCommand(strSelect, objConn)
    objCmd.Connection.Open
    return objCmd.ExecuteReader
    objCmd.Connection.Close()
    catch ex as OleDbException
    return nothing
    end try
    end function
    Ecco, tu ti stupisci perchè non funziona , io mi stupisco perchè a me funziona sempre :master: . Non fraintendermi, osserva bene il codice che hai scritto.
    1) se frequenti questo forum o anche aspitalia, avra senzaltro letto che è sconsigliabile utilizzare una funzione che restituisce un repeater.

    2) se proprio vogliamo utilizzarla, almeno che sia scritta bene.

    dopo l'istruzione che restituisce il reader:
    return objCmd.ExecuteReader

    non viene eseguito nient'altro. Return fa uscire dalla funzione!
    Perciò, l'istruzione objCmd.Connection.Close() non viene mai eseguita.

    Verrebbe eseguita SOLO se la mettessi dentro il blocco Finally
    Ma allora non funzionerebbe il reader che, per essere consumato, deve avere la connessione aperta. Che fare allora? Dovresti sotituire:

    return objCmd.ExecuteReader
    con
    return objCmd.ExecuteReader (CommandBehavior.CloseConnection)

    un po' così:
    codice:
        '-------------------------------------------------------------------------------------
        'Restituisce un oggetto DataReader o lancia eccezione in caso di errore
        'parametri: Stringa di connessione, stringa sql
        '-------------------------------------------------------------------------------------
        Public Function GetDataReader(ByVal stringaConnessione$, ByVal stringaSQL$) As OleDbDataReader
            Dim Reader As OleDbDataReader
            Dim Connessione As OleDbConnection
            Try
                Connessione = New OleDbConnection(stringaConnessione)
                Connessione.Open()
                Dim Comando As New OleDbCommand(stringaSQL, Connessione)
                Reader = Comando.ExecuteReader(CommandBehavior.CloseConnection)
                Return Reader
            Catch Errore As Exception
                Connessione.Close()
                Throw
            End Try
    
    
        End Function
    PER CHIUDERE LA CONNESSIONE, DEVI CHIUDERE IL READER ESPLICITAMENTE (anche se ho notato che il DataBind lo invoca da se)

    Ciao


















    Allora, tu non chiudi la connessione.
    Pietro

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 © 2026 vBulletin Solutions, Inc. All rights reserved.