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!

Commenti


nessun commento da segnalare...

Scrivi nuovo commento

Autore:  
E-mail:
Sito:
Ricorda le mie informazioni:
Messaggio:
Verifica codice: Password verification

 

-- Anteprima commento --


Versione italiana Versione italiana

CATEGORIE

Ajax (2)
ASP.NET (11)
C# Code (4)
IIS (1)
Silverlight (1)
Sql Server 2000 (1)
Varie (4)
Visual Studio (4)

ARCHIVIO

aprile 2009 (1)
maggio 2008 (1)
aprile 2008 (1)
gennaio 2008 (4)
dicembre 2007 (1)
maggio 2007 (1)
febbraio 2007 (1)
dicembre 2006 (3)
ottobre 2006 (1)
settembre 2006 (3)
agosto 2006 (1)
giugno 2006 (1)

CHI SONO [curriculum]

Curriculum ZofM

RINGRAZIAMENTI