Accueil
Rechercher:
sur developpez.com sur les forums
Forums | Tutoriels | F.A.Q's | Participez | Hébergement | Contacts
Club Emploi Blogs   TV   Dév. Web PHP XML Python Autres 2D-3D-Jeux Sécurité Windows Linux PC Mac
Accueil Conception Java DotNET Visual Basic  C  C++ Delphi MS-Office SQL & SGBD Oracle  4D  Business Intelligence
FORUMS .NET FAQs .NET TUTORIELS .NET SOURCES .NET LIVRES .NET OUTILS .NET BLOG .NET DOTNET TV

MySQL et .NET

Date de publication : 01/10/2004 , Date de mise a jour : 01/10/2004

Par LEBRUN Thomas (Autres Articles)
 

  

MySQL, la base de données la plus connue du monde Open Source, attire les développeurs par bien des égards: ses possibilités, ses performances, son prix...
SGBDR préféré des développeurs PHP, voyons comment les développeurs .NET peuvent également l'utiliser dans leurs projets (professionnels ou personnels).


1. Introduction
2. Installation du Provider
3. Les objets MySQL
4. Codage
5. Code Complet
6. MySQL via Internet
7. Conclusion
8. Téléchargement


1. Introduction

MySQL n'est pas supporté nativement dans l'environnement .NET. Mais, pour remédier à ce problème, vous pouvez télécharger différents providers qui vous permettront d'intégrer MySQL dans votre IDE.
Je vous recommande le provider de  MySQL Connector (anciènnement connut sous le nom ByteFx), que j'ai utilisé pour la rédaction de cet article, et que vous pourrez télécharger gratuitement à l'adresse suivante: http://dev.mysql.com/downloads/connector/net/1.0.html.


2. Installation du Provider

Après avoir téléchargé et décompressé le fichier ZIP, lancer l'installation (très rapide) en double-cliquant sur le fichier Setup.exe.
Modifiez, si besoin est, l'emplacement des fichiers à installer pour terminer l'installation.
A priori, rien n'a changer: pas de nouvelle icône sur le bureau, et le menu démarrer ne comporte qu'un nouveau dossier, qui ne contient lui-même que deux raccourcis vers des documentations.
Lancez donc votre environnement de développement (nous partirons du principe, pour cet article, que vous travaillez avec Visual Studio 2003) et choisissez de réaliser un nouveau projet (Mode Console ou WinForms, peu importe).
Une fois que tout est ouvert, dans l'explorateur de solution, faites un clic droit sur "Références" et choisissez "Ajouter une référence".
Si l'installation du provider s'est bien passée, vous devriez voir deux nouvelles références possibles à ajouter dans vos projets. La capture d'écran ci-jointe vous montrera lesquelles:



Sélectionnez alors ByteFx.MySqlClent.dll puis cliquez sur OK pour ajouter la référence à voter projet en cours.
Pensez ensuite à faire le "using" dans votre projet:

Mis en place du using
using ByteFX.Data.MySqlClient;

3. Les objets MySQL

Si vous avez déjà travaillé avec une base de données, sous .NET, telle que SQL Server, vous serez agréablement surpris de voir que les objets sont les mêmes.
En effet, seul le préfixe des objets change: à la place de SqlCommand, nous avons dorénavant MySqlCommand.
Voici un tableau récapitulatif des principaux objets:

Objet Utilité
MySqlCommand Représente une requête SQL à exécuter
MySqlConnection Représente une connexion à un serveur MySQL
MySqlDataAdapter Représente un ensemble de commandes de données utilisées pour remplir un dataset/mettre à jour une base de donnée MySQL
MySqlDbType (Enumération) Spécifie le type de données d'un champs, d'une propriété, à utiliser avec MySqlParameter
MySqlException Représente l'exception qui est levée lorsque MySQL retourne une erreur
MySqlParameter Représente le paramètre pour une commande MySQL
Cette liste, non exhaustive, vous montre les principaux objets que vous pourriez avoir à manipuler avec MySQL.


4. Codage

Après avoir vu la théorie, voyons un peu le côté pratique: la partie codage !
Le développement d'applications avec MySQL étant très similaire au développement avec SQL Server, je ne vais pas m'attarder trop longtemps sur cette partie: en effet tout ce que je pourrai vous dire ici ne serait qu'un simple copier/coller d'un développement sous SQL Server, donc aucun intérêt....
Je vais donc vous montrer un rapide exemple:
On commence par définir une chaîne de connexion au serveur MySQL:

Chaîne de connexion
string ConnnectionStr = "Database=BaseDeDonnees;Data Source=localhost;User Id=root;Password=password";
Ensuite, on déclare un objet MySqlConnecion, auquel on associe cette chaîne de connexion:

Déclaration de la connexion MySQL
private MySqlConnection Connection = new MySqlConnection(); Connection.ConnectionString = ConnnectionStr; // Ici, on ouvre la connexion au serveur Connection.Open();
Pour exécuter une simple requête SELECT, rien de plus simple: utilisez l'objet MySqlDataAdapter auquel vous associerez la requête SELECT à la propriété SelectCommand:

Exécution d'une requête SELECT
private MySqlDataAdapter MyAdapter = new MySqlDataAdapter(); // On définit la requête SELECT à exécuter string MySQLCmd = "SELECT * FROM LaTable"; // On associe cette requête à la propriété SelectCommand du MySqlDataAdapter MyAdapter.SelectCommand = new MySqlCommand(MySQLCmd, Connection);
Si vous avez un Dataset, vous pouvez tout à fait utiliser la méthode Fill(), du MySqlDataAdapter, pour le remplir:

Remplissage du Dataset
private DataSet ds = new DataSet(); // On remplit le dataset avec le résultat de la commande SELECT MyAdapter.Fill(ds);
Ensuite, libre à vous de travailler avec le Dataset, de la même façon que lors de vos autres développements.

Pour fermer la connexion au serveur MySQL, rien de plus simple, il vous suffit d'appeler la méthode Close(), de l'objet MySqlConnection:

Fermeture de la connexion
// On ferme la connexion le plus tôt possible Connection.Close();

5. Code Complet

Je vous mets ici une copie du code que j'ai utilisé pour mes tests: vous pourrez tout de même télécharger la solution complête pour Visual Studio 2003 à la fin de cet article.

Code source complet
using System; using System.Drawing; using System.Collections; using System.ComponentModel; using System.Windows.Forms; using System.Data; using ByteFX.Data.MySqlClient; namespace TestMySQL { public class Form1 : System.Windows.Forms.Form { private System.Windows.Forms.TextBox tbhote; private System.Windows.Forms.TextBox tblogin; private System.Windows.Forms.Button btconnect; private System.Windows.Forms.TextBox tbbase; private System.Windows.Forms.DataGrid dataGrid1; private System.Windows.Forms.TextBox tbpwd; private System.ComponentModel.Container components = null; private MySqlConnection Connection = new MySqlConnection(); private MySqlDataAdapter MyAdapter = new MySqlDataAdapter(); private DataSet ds = new DataSet(); public Form1() { // // Requis pour la prise en charge du Concepteur Windows Forms // InitializeComponent(); // // TODO : ajoutez le code du constructeur après l'appel à InitializeComponent // } protected override void Dispose( bool disposing ) { if( disposing ) { if (components != null) { components.Dispose(); } } base.Dispose( disposing ); } #region Code généré par le Concepteur Windows Form private void InitializeComponent() { this.tbhote = new System.Windows.Forms.TextBox(); this.tblogin = new System.Windows.Forms.TextBox(); this.tbpwd = new System.Windows.Forms.TextBox(); this.btconnect = new System.Windows.Forms.Button(); this.tbbase = new System.Windows.Forms.TextBox(); this.dataGrid1 = new System.Windows.Forms.DataGrid(); ((System.ComponentModel.ISupportInitialize)(this.dataGrid1)).BeginInit(); this.SuspendLayout(); // // tbhote // this.tbhote.Location = new System.Drawing.Point(24, 16); this.tbhote.Name = "tbhote"; this.tbhote.TabIndex = 0; this.tbhote.Text = "localhost"; // // tblogin // this.tblogin.Location = new System.Drawing.Point(256, 16); this.tblogin.Name = "tblogin"; this.tblogin.TabIndex = 1; this.tblogin.Text = "login"; // // tbpwd // this.tbpwd.Location = new System.Drawing.Point(376, 16); this.tbpwd.Name = "tbpwd"; this.tbpwd.PasswordChar = '*'; this.tbpwd.TabIndex = 2; this.tbpwd.Text = "password"; // // btconnect // this.btconnect.Location = new System.Drawing.Point(496, 16); this.btconnect.Name = "btconnect"; this.btconnect.TabIndex = 3; this.btconnect.Text = "Connexion"; this.btconnect.Click += new System.EventHandler(this.btconnect_Click); // // tbbase // this.tbbase.Location = new System.Drawing.Point(144, 16); this.tbbase.Name = "tbbase"; this.tbbase.TabIndex = 4; this.tbbase.Text = "base"; // // dataGrid1 // this.dataGrid1.DataMember = ""; this.dataGrid1.HeaderForeColor = System.Drawing.SystemColors.ControlText; this.dataGrid1.Location = new System.Drawing.Point(24, 64); this.dataGrid1.Name = "dataGrid1"; this.dataGrid1.Size = new System.Drawing.Size(544, 184); this.dataGrid1.TabIndex = 5; // // Form1 // this.AutoScaleBaseSize = new System.Drawing.Size(5, 13); this.ClientSize = new System.Drawing.Size(600, 266); this.Controls.Add(this.dataGrid1); this.Controls.Add(this.tbbase); this.Controls.Add(this.btconnect); this.Controls.Add(this.tbpwd); this.Controls.Add(this.tblogin); this.Controls.Add(this.tbhote); this.Name = "Form1"; this.StartPosition = System.Windows.Forms.FormStartPosition.CenterScreen; this.Text = "MySQL et .NET"; ((System.ComponentModel.ISupportInitialize)(this.dataGrid1)).EndInit(); this.ResumeLayout(false); } #endregion [STAThread] static void Main() { Application.Run(new Form1()); } private void btconnect_Click(object sender, System.EventArgs e) { string ConnnectionStr = String.Empty; if ( (tbhote.Text.Length == 0) || (tbbase.Text.Length == 0) || (tblogin.Text.Length == 0) ) { MessageBox.Show("Erreur, les champs Hôte, Base et Login doivent être remplis", "Erreur", MessageBoxButtons.OK, MessageBoxIcon.Error); } else { // On définit la chaine de connexion ConnnectionStr = "Database=" + tbbase.Text + ";Data Source=" + tbhote.Text + ";User Id= " + tblogin.Text + ";Password=" + tbpwd.Text; } Connection.ConnectionString = ConnnectionStr; try { // On ouvre la connexion Connection.Open(); // On définit la requête SELECT à exécuter string MySQLCmd = "SELECT * FROM phpbb_users"; // On associe cette requête à la propriété SelectCommand du MySqlDataAdapter MyAdapter.SelectCommand = new MySqlCommand(MySQLCmd, Connection); // On remplit le dataset avec le résultat de la commande SELECT MyAdapter.Fill(ds); // On affiche le datagrid dataGrid1.DataSource = ds.Tables[0]; dataGrid1.Refresh(); // On ferme la connexion le plus tôt possible Connection.Close(); } catch(MySqlException Ex) { MessageBox.Show("Erreur SQL:\n" + Ex.Message, "Erreur", MessageBoxButtons.OK, MessageBoxIcon.Error); } } } }

6. MySQL via Internet

Beaucoup d'entre vous, après avoir lu cet article, auront certainement cette idée: "Tiens, pourquoi je n'essayerais pas de joindre la base MySQL de mon site perso ?"
En effet, rien de tel que d'essayer pour apprendre ;)
Mais pour pouvoir faire ceci, vous devez prendre en considération plusieurs choses:

  • Pour joindre l'hôte MySQL de votre serveur, il faut que votre hébergeur ait ouvert le port de MySQL (par défaut 3306) à l'extérieur : sur la plupart des hébergeurs, cela n'est pas fait pour des raisons de sécurité, donc à moins que vous ne possédiez votre propre serveur dédié, il vous sera impossible de réaliser votre idée
  • Si vous savez que le port est ouvert mais que vous n'arrivez pas à joindre le serveur MySQL, essayer de passer par l'IP du serveur pour voir s'il ne s'agit pas d'un problème de DNS
  • Joindre un site, par Internet, c'est un peu comme utiliser un WebService : cela bloque l'affichage. Pour éviter cela, penser à utiliser des Threads.

7. Conclusion

Comme vous avez certainement pu le remarquer tout au long de cet article, le développement pour MySQL ne diffère pas énormément du développement sous SQL Server:
méthodes identiques, propriétés identiques, etc.... Voilà qui permet aux jeunes développeurs de pouvoir commencer à développer des applications utilisant une base de données sans qu'ils en aient les possibilités financières.


8. Téléchargement

Télécharger un exemple d'application (pour Visual Studio 2003):  Sources



Les sources présentées sur cette page sont libres de droits, et vous pouvez les utiliser à votre convenance. Par contre, la page de présentation constitue une oeuvre intellectuelle protégée par les droits d'auteurs. Copyright © 2004 LEBRUN Thomas. Aucune reproduction, même partielle, ne peut être faite de ce site et de l'ensemble de son contenu : textes, documents, images, etc sans l'autorisation expresse de l'auteur. Sinon vous encourez selon la loi jusqu'à 3 ans de prison et jusqu'à 300 000 E de dommages et intérêts. Cette page est déposée à la SACD.

Responsables bénévoles de la rubrique DotNET : Jérôme Lambert (Cardi) et Louis-Guillaume Morand - Contacter par EMail :
Vos questions techniques : forum d'entraide DotNET - Publiez vos articles, tutoriels et cours
et rejoignez-nous dans l'équipe de rédaction du club d'entraide des développeurs francophones
Nous contacter - Copyright © 2000-2008 www.developpez.com - Legal informations.