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.