MySqlDataReader bug in CloseConnection behavior |
Visite: 3840 |
martedì 12 dicembre 2006 |
Page not translated!
I'm sorry but the text of this page doesn't have translation at this time.
Da poco tempo a questa parte mi sono dedicato per motivi di lavoro all'ormai famoso
e strausato database MySql. Avevo già avuto alcune esperienze con la versione 4.x
e mi ero trovato davvero male. Me ne avevano sempre parlato bene ma sinceramente
non ne conoscevo le potenzialità. Dopo una visionata generale mi ero subito chiesto
"ma.. le stored? i trigger? le viste? niente?" hmmm qui c'è qualcosa che non quadra.
Sarà ma per uno come me abituato a sfruttare a pieno le funzionalità di un database
per poter raggiungere alti livelli di compattezza non è mi è parso proprio granché
questo MySql (e qui molti me ne avranno immagino..). Soprattutto dopo che ho notato
la precarietà del motore InnoDB dove, per citare un semplice esempio, non supportava
aggiornamenti in cascata dei dati su relazioni di chiavi esterne. Dopo questa piccola
e veloce avventura nel mondo MySql mi è ricapitata, come già detto, la necessità
di lavorare utilizzando la versione 5.x di MySql. Ebbene, il team di sviluppo ha
fatto grandi passi avanti e finalmente è possibile utilizzare MySql come un vero
database server ed applicando una logica business separandola dal CRUD.
Tornando a noi... a parte il discorso server, ho avuto un grosso problema con i
DataConnector .Net 1.0.7/.8. E' necessario fare molta attenzione quando si utilizza
il metodo
ExecuteReader
della classe
MySqlCommand perché, indicando come parametro
un enumerato
CommandBehavior.CloseConnection,
il
MySqlDataReader
restituito non
chiuderà la connessione al momento della chiusura del DataReader. Ho notato il problema
durante la fase di test su un portale in fase di realizzazione. Sono abituato a
richiamare i DataReader con una sintassi del genere:
public static
MySqlDataReader GetDataReader(string sql)
{
MySqlConnection cn =
new MySqlConnection(connectionString);
cn.Open();
MySqlCommand cm =
new MySqlCommand(sql, cn);
MySqlDataReader dr = cm.ExecuteReader(CommandBehavior.CloseConnection);
return dr;
}
dove, una volta ricevuto
l'oggetto
MySqlDataReader, è possibile utilizzarlo per poi chiuderlo alla fine della
lettura. Passando l'argomento
CommandBehavior.CloseConnection la chiusura della connessione al database è contestuale alla chiusura del DataReader. Beh, questo purtroppo non
accade. Come è già stato segnalato da altri utenti (
forum.mysql.com)
sembra essere un bug legato all'interfaccia
IEnumerable ereditata dal
MySqlDataReader. Ho già
risolto "fixando" l'errore (e comunque devo verificarne l'effettiva funzionalità..
altro tempo perso...)
e ricompilando i sorgenti della MySql ma non ritengo sia una soluzione elegante
per un software così osannato. Insomma... sicuramente hanno di nuovo perso quel
pò di fiducia che gli avevo concesso ;-)
Spero comunque possa essere d'aiuto a qualcuno.. attenzione quindi!
nessun commento da segnalare...
Scrivi nuovo commento