Home Page Home Page Articoli Utilizzare il Database MySQL con .NET

Utilizzare il Database MySQL con .NET

Questo articolo è rivolto a tutti quelli che vogliono sviluppare una soluzione efficiente senza sborsare cifre elevate per l'acquisto di licenze di SQL Server o Oracle e che non vogliono rinunciare alle prestazioni minori offerte da un "quasi database" come potrebbe essere Access.
Autore: David De Giacomi Livello:
Database MySQL contro tutti
L'impero Microsoft è ed è quasi sempre stato anche in passato un fornitore di ottimi prodotti all'avanguardia in tutti i settori compreso quello dei Database. Il suo prodotto di punta infatti in questo campo è l'ormai noto SQL Server giunto alla versione 2000.
A livello entry-level esiste invece Access che molti non considerano un vero e proprio Database ed in effetti è così, un po' per i suoi limiti intrinseci che non permettono lo sviluppo di applicazioni molto scalabili, un po' per alcune mancanze di funzionalità quali Triggers, Stored Procedures e via di seguito. Questo viene anche dal fatto che il prezzo è molto abbordabile. Nonostante tutto con Access si possono realizzare applicazioni e soluzioni molto rapidamente, senza molte difficoltà ed efficienti.

Dall'altra parte della sponda c'è il gigante dei Database, Oracle con il suo ultimo Oracle 10g che ha battuto tutti i record di performance.
In passato Oracle è sempre stato un RDBMS (Relational Database Management System) non molto avvicinabile visti i suoi costi astronomici.

Recentemente però è stato deciso dal management un cambio di politica da questo punto di vista abbassando i costi di Oracle Standard Edition fino a circa 5.000 $ per CPU. L' Oracle Enterprise Edition invece è ancora inchiodato all'assurda cifra di circa 40.000 $ ! :)

Vicino a questi due colossi è nato diversi anni fa in Svezia un piccolo Database Open-Source, chiamato MySQL. Fondata da due svedesi e un finlandese, MySQL (il nome della omonima società) si è fatta strada durante gli anni e release dopo release ha raggiunto traguardi eccezionali, facendo rientrare MySQL nella lista dei Database più utilizzati al mondo con oltre 4 milioni di installazioni. Certo non è all'altezza di Oracle o SQL Server ma si ritaglia un ottimo spazio nel settore, grazie anche ai suoi costi decisamente bassi, si parla di circa 220 ? per la versione Standard e circa il doppio 440 ? per la versione Pro.
Vorrei aggiungere che MySQL ha al suo attivo grossi clienti del calibro di Yahoo.com che usa il Database MySQL addirittura nella sezione Yahoo! Finance. Gli ultimi dati parlavano di un database di circa 40 giga, questo per farvi capire che carico riesce a sostenere questo database !

MySQL è multipiattaforma
Questo database è stato progettato per essere multipiattaforma. Era nato come Database per Linux ma successivamente è stato portato anche su Windows.
Questa decisione nonostante abbia portato dei costi più elevati dal punto di vista dello sviluppo ha aumentato però il target degli utenti calcolando che 9 computer su 10 utilizzano Windows.
I bassi costi di licenza di MySQL l'hanno fatto diventare negli anni il Database più usato sui siti Web di medio-basso livello ed infatti grazie all'unione con PHP (anch'esso multipiattaforma) può diventare uno straordinario pacchetto per produrre applicazioni Web.
Infatti ci sono aziende che offrono Hosting sia su Windows sia su Linux e offrono come Database MySQL associato a PHP o ASP.

MySQL e .NET
Fatto questo discorso, vien da sè che MySQL si può utilizzare anche per lo sviluppo di applicazioni .NET in genere, quindi ASP.NET o WinForms con il linguaggio preferito C# o VB.NET o altri eventuali.
Visto che sui Newsgroups e sul Forum è un tema molto dibattuto quello relativo a MySQL ho deciso appunto di scrivere qualcosa per mettere in grado tutti di programmare in .NET usando MySQL come Database principale proprio perchè molte aziende così come molti privati non possono sostenere ed accolarsi costi di licenze e di gestione quali quelli di Oracle e SQL Server.

I limiti di MySQL
Tutto sembra piacevole fino a qui, ma non tutto è rose e fiori. Dobbiamo anche però segnalare che MySQL ha dei limiti in alcuni casi rilevanti infatti mancano il supporto a:

- Stored Procedures
- Triggers
- Unicode (per applicazioni multilingua internazionali)
- Views
- Subquery
- Altro

La versione di MySQL che ho scaricato è una stable cioè è quella rilasciata per la produzione che dovrebbe essere "esente" da bug ed è numerata 4.0.18.
C'è disponibile sul sito un'altra versione la 4.1.1 che è quella in sviluppo che però già pare supporti due delle features mancanti che ho elencato qui sopra e cioè Subquery e Unicode. Nella versione 5.0 invece è previsto lo sviluppo del supporto alle Stored Procedures.

Cosa mi serve per sviluppare con .NET usando MySQL ?

Database Server
Per prima cosa bjsogna installare il Database Server vero e proprio. Lo potete trovere sul sito dedicato agli sviluppatori che trovate a questo indirizzo: http://dev.mysql.com/ ">MySQL Developers
La versione che ho scaricato ed utilizzato è coem già detto la 4.0.18, cliccando su questo link giungerete direttamente alla pagina dei Downloads dove ci saranno disponibili tutte le versioni, per Windows, Linux, Mac, ecc. http://dev.mysql.com/downloads/mysql/4.0.html ">Download MySQL 4.0.x

.NET Data Provider
Come ormai ben sapete il .NET Framework 1.1 offre molte classi a disposizione per la connessione ai Database più disparati, SQL Server (SqlConnection) in testa, ma anche Oracle (OracleConnection) oppure le classi più generiche per collegarsi utilizzando drivers OleDB o via ODBC (OleDbConnection/OdbcConnection).
Molto di quelli che ho sentito sui Newsgroups o sul Forum si ostinano a voler utilizzare queste ultime due classi per connettersi a MySQL con il risultato che poi si ha sempre qualche problemino.
Io consiglio sempre di scaricarsi un .NET Data Provider per MySQL quindi progettato ed ottimizzato per funzionare per questo Database.

Di .NET Data Provider per MySQL ce ne sono diversi, sia Freeware che Commerciali. Naturalmente noi vogliamo spendere sempre meno e quindi mi sono dotato di uno Freeware e fra l'altro anche Open Source. Per completezza vi segnalo tre link che vi portano ad altrettanti Data Provider:

- http://sourceforge.net/projects/mysqldrivercs/ ">MySQLDriverCS (free)
- http://www.bytefx.com/ ">ByteFX (free)
- http://crlab.com/mysqlnet/ ">MySQLDirect .NET Data Provider (commerciale)

Molti mi chiedono, "ma qual è il migliore ?" Beh, la risposta non è così facile. Chiedendo agli autori di questi software ognuno tirerà l'acqua al suo mulino dicendo che il suo è il migliore.
In realtà bisognerebbe prendere tutti i Data Providers ed effettuare dei Benchmarks dei test, e misurare le prestazioni così come fanno per esempio le riviste di settore nel testare i nuovi PC disponibili sul mercato.

Un client di amministrazione
Ma non è finita qui. Come si fa a gestire poi il Database ? O si può fare tramite linea di comando con un client apposito o bisogna scaricare degli altri tools decisamente più comodi, molto più simili per chi la conosce alla Microsoft Management Console per la gestione di molti prodotti Microsoft. Sempre sul sito MySQL.com ho trovato due Tools interessanti eccoli.

MySql Control Center 0.9.4
Ancora in versione Beta rappresenta uno strumento molto utile per la gestione di MySQL dal punto di vista dei dati. Quindi vi permette di aggiungere alla TreeView i Server da amministrare, vi permette la gestione delle Tables, quindi creazione, modifica, inserimento dati, eliminazione ecc. Comprende un client per l'esecuzione delle query molto comodo. Inoltre si può amministrare il Server vedendo le sessioni e le statistiche, e per finire c'è la gestione della sicurezza con la creazione e la gestione degli utenti.
Diciamo che questo strumento a differenza del secondo è più orientato agli sviluppatori.

Control Center
Control Center


MySql Administrator 1.0.3
Quest'altro Tool invece è più orientato al sistemista. Anch'esso è molto semplice da utilizzare. Sulla sinistra c'è un menù molto gradevole grazie alle icone con stile XP che vi permette di accedere alle varie sotto aree.
Anche con questo Tool potete gestire la sicurezza e quindi gli utenti del Database, vedere le sessioni attive, modificare le impostazioni generali del Database, vedere lo stato di salute Health grazie a grafici aggiornati in tempo reale molto simili a quelli del Task Manager di Windows, leggere i Logs e addirittura fare i Backup e i Restore dei Cataloghi.

Administrator
Administrator


I Grafici dell'Health del Database
I Grafici dell'Health del Database


C'è da sottolineare che l'installazione di questi prodotti è molto lineare e semplice. Per ognuna c'è il pacchetto di setup con il classico setup.exe, l'intervento dell'utente è minimo e quindi non dovreste avere molti problemi.

Una volta giunti qui la parte più difficile è stata superata. Tutto quello che viene dopo sarà una passeggiata.

N.B. Vi ricordo che se vi connettete al Database con i client di amministrazione dovrete usare come nome utente root e password vuota. Vi raccomando, se siete esposti su Internet, di modificare immediatamente la password e creare un nuovo utente di test per lo sviluppo.

N.B. La porta su cui è in ascolto il listener di MySQL è la 3306

Visual Studio .NET e MySQL
Per cominciare a lavorare con .NET usando MySQL si devono seguire alcuni passi obbligati che descriverò qui di seguito. Questa procedura vale sia che stiate sviluppando applicazioni Web (WebForms) sia applicazioni Windows (WinForms). In poche parole è necessario referenziare nel progetto l'Assembly (libreria) del .NET Data Provider, vi ricordo la libreria che vi permette di accedere al Database e quindi in definitiva ai dati.

La procedura è la solita, è necessario fare click con il tasto destro su References nel Solution Explorer e selezionare la voce Add Reference.



Apparirà la classica finestra con i vari Assemblies registrati. Visto che il nostro MySQLDriverCS non ci sarà, sarà necessario premere Browser e andare a cercarlo. Nel mio caso il percorso era C:\Program Files\MySQLDriverCS\dll\MySQLDriverCS.dll.



A questo punto è possibile operare con il Database.
N.B. Prima di poter effettivamente fare dei test vi consiglio, così come ho fatto io, di creare una tabella di Test sul Database utilizzando magari lo strumento indicato poco fa (Control Center). Io ho creato una Tabella semplicissima chiamata Employees contenente tre campi, Name, Surname e RegistrationDate.


MySQL con WinForms
Se ora, avete una buona conoscenza di ADO.NET e conoscete che cosa sono i DataSet, i DataAdapter e via di seguito, allora sarà tutto una passeggiata.
Vediamo subito un breve esempio in C#.
Ricordiamo come al solito che oltre ad aver referenziato l'Assembly è necessario referenzie il namespace via codice con il classico using (in C#) e Imports in VB.NET.


using MySQLDriverCS;


Successivamente sulla mia Form aggiungo una DataGrid a cui assocerò dati provenienti dal Database MySQL.
Il codice necessario è molto semplice, molto simile a quello che useremmo se ci connettessimo a un Database SQL o Access proprio perchè ADO.NET aumenta l'astrazione e fa si che noi ci troviamo a scrivere codice che è quasi sempre uguale, non tenendo conto della base dati sottostante.
Facendo un esempio pratico è come quando una decina d'anni fa, nel campo dello sviluppo dei Videogames non c'erano le DirectX e il programmatore doveva sviluppare il supporto per le varie schede video. Ora il programmatore si occupa solo di scrivere il codice del suo gioco, e le DirectX fanno tutto il resto, cioè si interfacciano con i Drivers sottostanti. Allo stesso modo ADO.NET e i Data Provider fanno la stessa cosa con i Database.
Dicevamo, ecco il codice da inserire nell'evento Load della Form:


DataSet ds=new DataSet();
MySQLConnection mysqlconn=new MySQLConnection("Server=Localhost;Data Source=test;UID=root;PWD=");

mysqlconn.Open();
MySQLDataAdapter da=new MySQLDataAdapter("SELECT * FROM EMPLOYEES",mysqlconn);
da.Fill(ds,"Employees");

dataGrid1.DataSource=ds.Tables["Employees"];
mysqlconn.Close();


ed ecco il risultato:

Una Datagrid riempita con dati di MySQL
Una Datagrid riempita con dati di MySQL



MySQL e ASP.NET
Con lo stesso procedimento possiamo andare a realizzare una applicazione Web. Questa volta però invece di fare un semplice Binding ad una DataGrid andremo ad utilizzare un MySQLDataReader e andremo a riempire l'oggetto <asp:Literal (che renderizza il testo che andiamo ad assegnare alla proprietà .Text) con i nomi delle tabelle contenute nel nostro Database di Test.

In altri Database come per esempio SQL Server c'è una Query particolare (es. select * from sysobjects) da utilizzare per elencare gli oggetti del Database. In MySQL è diversa ed è la seguente:

show tables

Quindi dopo aver iniziato una nuova applicazione ASP.NET e aver creato una pagina ASP andiamo ad aggiungere il controllo Literal in questo modo:

<asp:Literal ID="Tables" runat="Server" />

Il codice server-side in C# nell'evento Load della pagina sarà il seguente:


if (!Page.IsPostBack)
{

MySQLConnection mysqlconn=new MySQLConnection("Server=localhost;Data Source=test;User ID=root;Password=;");
mysqlconn.Open();

MySQLCommand cmd=new MySQLCommand("show tables",mysqlconn);
MySQLDataReader dr=cmd.ExecuteReaderEx();

while (dr.Read())
Tables.Text+=dr[0].ToString() + "
";

mysqlconn.Close();
}


e dopo aver lanciato l'applicazione Web il risultato sarà questo:

La pagina Web mostra le tabelle del Database
La pagina Web mostra le tabelle del Database


Conclusioni
Come abbiamo mostrato con pochi e semplici passi e grazie a un .NET Data Provider è possibile interfacciarsi e recuperare i dati da un Database MySQL. Per molte aziende come già detto in precedenza una soluzione basata su Database più grossi come Oracle o SQL Server è impensabile/improponibile e quindi MySQL costituisce effettivamente un'alternativa valida e molto economica da prendere seriamente in considerazione. Le sue mancanze e i suoi limiti vengono controbilanciati da elevate prestazioni e prezzi di licenza molto contenuti. Aggiungo infine che MySQL supporta anche le transazioni e quindi grazie alla classe MySQLTransaction potrete sfruttare anche questa potenzialità.
Voto medio articolo: 4.1 Numero Voti: 25
David De Giacomi

David De Giacomi

Unico e irripetibile Profilo completo

Articoli collegati

Le licenze Open Source
Sempre più progetti sposano la filosofia Open Source, ricorrendo alle più disparate licenze software, creando un poco confusione agli sviluppatori che vorrebbero utilizzare il codice di tali progetti. Cerchiamo di rendere il tutto meno complicato.
Autore: Giovanni Ferron | Difficoltà:
Un browser alternativo : Mozilla Firefox
Un articolo controcorrente rispetto alla linea editoriale di questo sito, ma è quasi un dovere parlare della tecnologia e delle avanzate features messe a disposizione da questo ottimo Browser di ultima generazione perchè solo così si può definire questo gioiello. Provare per credere.
Autore: David De Giacomi | Difficoltà: | Commenti: 3
.Net e il Pinguino? Mono !
Questo articolo vi introduce allo sviluppo orientato alla piattaforma (Mono) che permette l'integrazione tra Microsoft e Linux ... l'open source è tra noi!
Autore: Giovanni Ferron | Difficoltà: | Commenti: 8 | Voto:
Copyright © dotNetHell.it 2002-2024
Running on Windows Server 2008 R2 Standard, SQL Server 2012 & ASP.NET 3.5