[TUTO] Interagir sur une base MySQL sous Linux avec un client Microsoft .net

mysql

Nous avons déjà vu ensemble comment interagir avec une base de données Microsoft SQL depuis PHP sous Linux. Je vous propose aujourd’hui de voir l’inverse : comment depuis un client Microsoft Windows exécutant du code .net interagir avec un base de donnée MySQL installé sur un serveur Linux (Ubuntu dans mon cas).

Pour l’exemple, j’interagirai avec ma base MySQL depuis un script powershell (exécuté sur un poste Windows)  mais la méthode est la même (à quelques subtilités de langage près pour l’ensemble des langage .net).

 

Du coté Microsoft : script powershell

dotnet

Nativement, .net ne gère pas les connexion MySQL. Toutefois, on peut lui adjoindre une bibliothèque nommée MySQL Connector /Net, qui se télécharge ICI. Une fois cette bibliothèque installée sur votre poste, il ne reste plus qu’à la charger dans votre script par cette ligne :

[void][System.Reflection.Assembly]::LoadWithPartialName("MySql.Data")

A présent on peut se connecter à un serveur MySQL. Par défaut, la connexion se fait via le port 3306. Il faut alors définir le serveur, la base de donnée, le compte mysql et son mot de passe :

$port = "3306"

$srv= "ipduserveur"

$user = "comptemysql"

$mdp = "mdpmysql"

$bdd = "bddmysql"

Puis on lance la connexion :

$connection = New-Object MySql.Data.MySqlClient.MySqlConnection

$connection.ConnectionString = “server=$srv;port=$port;uid=$user;pwd=$mdp;database= bdd;Pooling=False”

$connection.Open()

Il ne reste plus qu’à définir et exécuter sa requête SQL :

$Requete = "select * from tablemySQL"

$command = New-Object MySql.Data.MySqlClient.MySqlCommand($Requete, $connection)

On va maintenant récupérer le tout dans un tableau :

$dataAdapter = New-Object MySql.Data.MySqlClient.MySqlDataAdapter($command)

$DataSet = new-object System.Data.DataSet

$DataAdapter.Fill($DataSet)

$tableauSQL = $DataSet.Tables[0].Rows

Maintenant affichons chaque résultat de ce tableau :

Foreach ($elements in $tableauSQL)

{

$donnee= "$($elements.donneeSQL)"

write-host $donnee

}

Une fois nos données récupérées, on ferme la connexion :

$connection.Close()

script

Facile n’est ce pas? Toutefois, pour pouvoir se connecter, une subtilité persiste dans la configuration Linux.

 

Du coté GNULinux : paramétrage des accès

Mon serveur Linux est un Ubuntu sur lequel est installé phpmyadmin. Lors de mes premières connexions via le script powershell, j’ai été confronté à cette erreur :

Unable to connect to any of the specified MySQL hosts

erreurmysqldotnet

Ce message peut être la conséquence de plusieurs causes. Peut-être les variables définies pour la connexion (serveur,base de donnée, compte mysql et mot de passe) ne sont pas bonnes. Si vous êtes certain de celles-ci, peut-être n’avez vous pas les autorisations pour vous connecter à votre base SQL en 3306.

Si on vérifie avec nmap (nmap -p 3306 ipduserveur), on est vite fixé : le port 3306 semble. Pour, pouvoir se connecter il faut alors modifier le fichier /etc/mysql/my.cnf de sorte qu’il contienne la ligne :

bind-address = x.x.x.x

x.x.x.x étant l’adresse ip de l’interface sur laquelle MySQL doit écouter. Vous pouvez mettre 0.0.0.0 pour que MySQL écoute les connexions venant de toutes les interfaces réseaux. Il sera donc totalement accessible mais cela est dangereux si votre serveur est connecté à Internet directement. (à ce sujet cf. ICI) Dans mon cas j’ai mis l’adresse IP de mon serveur sur le LAN.

La modification du fichier my.cnf peut être faite directement en ligne de commande avec l’utilitaire vi (avec la commande sudo vi /etc/mysql/my.cnf):

modifmycnf

Ou encore avec un éditeur graphique comme gedit (avec la commande sudo gedit /etc/mysql/my.cnf).

Puis, redémarrez MySQL avec la commande sudo /etc/init.d/mysql restart :

restartmysql

A partir de là, vous pourrez normalement vous connecter sans encombre à votre serveur MySQL sous Linux depuis un client sous Microsoft Windows en .Net.

sql

Là encore, nous avons l’illustration de la possibilité d’interopérabilité des systèmes Windows et Linux. Cela n’est pas sans difficulté mais ça reste possible. A vous de jouer maintenant!

Vus : 585
Publié par Geek de France : 203