Nessun risultato. Prova con un altro termine.
Guide
Notizie
Software
Tutorial

ASP.NET e MySQL Connector

Sfruttare MySql con ASP.NET e Visual Studio
Sfruttare MySql con ASP.NET e Visual Studio
Link copiato negli appunti

Con l'uscita dei Connector per il framework .Net, si è raggiunta una profonda integrazione tra i server MySQL ed il Framework .Net di Microsoft. Prima di essi, per accedere ai "MyDatabase", era necessario utilizzare connessioni ODBC che, utilizzando un protocollo standard, non fornivano tutte le funzionalità che un server MySQL 5.0 può dare.

Ad oggi il team di sviluppo ha raggiunto la release 5.1.4, finalmente priva di numerosi e fastidiosi bug che avevano intaccato le vecchie versioni (vi consiglio caldamente di controllare periodicamente eventuali aggiornamenti). Questa release permette di collegarsi a versioni di server MySQL 4.0, 5.0 e 6.0 (ora in versione alpha).

I Connector implementano tutte le interfacce ADO.NET e si integrano alla perfezione con il Framework e, da qualche tempo a questa parte, con gli ambienti di sviluppo di casa Microsoft. In questo breve articolo ne analizzeremo alcune semplici particolarità, ma ne consiglio la lettura a chi ha già una formazione base sulle connessioni in ambiente ADO.NET.

Come utilizzare i Connector

Una volta scaricati ed installati i Connector ci danno la possibilità di accedere al namespace MySql.Data dove sono presenti tutte le classi che ci garantiranno maggiore sicurezza e scalabilità durante l'accesso ai dati su database MySQL.

Utilizzando tool di sviluppo come Visual Studio o Visual Web Developer, sarà necessario referenziare il componente MySQL.Data:

Figura 1. Referenziare MySql.Data
Referenziare MySql.Data

In caso di applicazioni ASP.NET verrà indicata la referenza direttamente nel file web.config in questo modo:

<assemblies>

<add assembly="MySql.Data,Version=5.1.4.0,Culture=neutral,PublicKeyToken=C5687FC88969C44D"/>
</assemblies>

La DLL ovviamente deve essere presente sul computer in cui verrà eseguita l'applicazione e presente nella cache .NET; nel caso di applicazioni Web è possibile copiare il file MySQL.Data.dll direttamente nella cartella Bin del nostro sito, al resto penserà IIS durante la fase di compilazione del progetto.

Integrazione con Visual Studio

Il duro lavoro del team MySQL ha portato i suoi frutti: finalmente è possibile utilizzare le funzionalità di Visual Studio per poter gestire i database MySQL come connessioni di dati esterne:

Figura 2. Selezione visuale della sorgente dati MySql
Selezione visuale della sorgente dati MySql

In questo modo avremo a disposizione il database MySQL direttamente dal menu risorse di VS. Potremo quindi interrogare il database, gestire Tabelle, Trigger, Stored Procedure e Viste senza dover installare o utilizzare programmi di terze parti.

Figura 3. Modificare i dati direttamente da Visual Studio
Modificare i dati direttamente da Visual Studio

Colleghiamoci al server

Creare connessioni direttamente da codice risulta semplice ed intuitivo, visto la completa integrazione con l'ambiente ADO.NET e quindi la strada da percorrere è di veloce realizzazione, e la somiglianza con il resto delle classi ODBC/OLEDB presenti nel Framework è evidente.

DataSet ds = new DataSet();

// apro la connessione al server db
MySqlConnection cn = new MySqlConnection("Database=Test;Data Source=localhost;User Id=usr;Password=pwd;");

// ora preparo la query da eseguire come comando SQL
MySqlDataAdapter cm = new MySqlDataAdapter("SELECT * FROM tabella;", cn);

// popolo il DataSet con le informazioni ricevute
cm.Fill(ds);

// chiudo la connessione
cn.Close();

La connessione verrà gestita dall'oggetto MySqlConnection al quale passeremo una stringa di connessione con eventuali parametri (per maggiori informazioni sulla stringa di connessione MySQL rimando a questo link). Da quel punto in poi sarà il MySqlDataAdapter a creare l'interfacciamento tra l'applicazione e la base dati.

Finalmente i parametri

Era già possibile utilizzare i parametri con il vecchio ODBC ma il tutto risultava molto macchinoso e nemmeno troppo elegante (ad es. è necessario rispettare l'ordine di inserimento nell'array con quello della query SQL). Finalmente, con i Connector, è possibile utilizzare una sintassi pulita e molto più leggibile:

DataSet ds = new DataSet();
MySqlDataAdapter da = new MySqlDataAdapter();
MySqlCommand cm = new MySqlCommand("SELECT * FROM tabella WHERE ID=?ID", cn);

// aggiungo un parametro
// ipotizzo di ricercare l'utente con ID uguale a 1
cm.Parameters.Add("?ID", 1);

// imposto cm come Command della connessione
da.SelectCommand = cm;

// popolo il DataSet con le informazioni ricevute
da.Fill(ds);

Nelle prime versioni dei Connector si usava il carattere '@' (chiocciola) per precedere il nome del parametro, proprio come su MSSQL. Ora invece è necessario indicare il punto interrogativo ?, ma è ancora previsto l'utilizzo della vecchia sintassi indicando nella stringa di connessione:

OldSyntax = true;

Si tratta però di una soluzione sconsigliata dal team MySQL, visto che l'intenzione è quella di utilizzare il carattere '?' per i parametri (eccessiva affinità con il database server di casa Microsoft?).

Supporto multi-resultsets

Altra, attesa, novità del MySqlDataAdapter è il supporto per le multi query. Indicando ad esempio più query di selezione, MySqlDataAdapter crea una tabella nel DataSet (o un risultato nel DataReader) per ogni query:

String sql = "SELECT * FROM tabella1;SELECT * FROM tabella2;SELECT * FROM tabella3;";
MySqlDataAdapter cm = new MySqlDataAdapter(sql, cn);
cm.Fill(ds);

// ora nel DataSet sono presenti 3 tabelle
// con i risultati delle 3 SELECT appena eseguite

Inizialmente questa innovazione ha dato non pochi problemi agli sviluppatori del team ma, dopo svariate verifiche, ho potuto constatare anche di persona il corretto funzionamento in ambiente multi-resultsets rilasciato con le ultime versioni dei Connector.

Supporto per le Stored Procedure

Con la versione 5.0 del server MySQL possiamo finalmente utilizzare procedure all'interno del database e richiamarle da codice inviando eventuali parametri in entrata/uscita. Per richiamare una semplice procedura come questa (che "prende" tutti gli utenti con data di nascita maggiore/uguale a quella indicata come parametro):

CREATE DEFINER='root'@'localhost' PROCEDURE 'RecuperaUtenti'(
  IN Data TIMESTAMP
)
BEGIN
  SELECT * FROM Tabella WHERE (Tabella.DataNascita >= Data);
END

Basterà scrivere un codice del genere:

MySqlConnection cn = new MySqlConnection(stringaConnessione);
MySqlCommand cm = new MySqlCommand();

// imposta la connessione
cm.Connection = cn;
cm.CommandType = CommandType.StoredProcedure;
cm.CommandText = "RecuperaUtenti"; // nome della stored da richiamare

// apre la connessione
cm.Connection.Open();

// prepara il parametro in entrata
MySqlParameter p = new MySqlParameter("?Data", MySqlDbType.Timestamp);
p.Value = Convert.ToDateTime("01/01/1980");
cm.Parameters.Add(p);

// esegue la stored, popolando un DataReader
MySqlDataReader dr = cm.ExecuteReader();

//
// qui posso usare il DataReader
//

// chiude tutto
dr.Close();
cn.Close();

Conclusione

I Connector/Net vengono pubblicati mediante licenza GPL e sono aggiornati frequentemente dal team MySQL. Attenzione però: durante le prime versioni erano presenti numerosi bug che hanno reso faticose intere giornate di lavoro per chi (come me) è incappato in uno di questi. Con la versione 5.1 si è raggiunta una buona stabilità e l'integrazione con Visual Studio rende ancora più piacevole l'utilizzo del database MySQL in ambiente Microsoft. Lo sviluppo di MySQL si sta quindi facendo molto interessante anche per tutti quei sviluppatori .NET che ancora non hanno testato uno dei diretti concorrenti, in ambiente Web, di MSSQL.

Ti consigliamo anche