MySQL Connection mit C# – Eine kleine Anleitung
Drei Dinge werden als Erstes benötigt um eine MySQL Connection via C# aufbauen zu können:
1. MySQL Server (für localhost – Apache zum Beispiel)
2. MySQL Administrator (phpMyAdmin)
3. MySQL Connector .net (https://dev.mysql.com/downloads/connector/net/)
MySQL Server
Der MySQL Server ist der Server, wo drauf die Datenbank liegt und man kann z.b. per CommandLine abfragen tätigen bzw. auch Tabellen erzeugen. Wenn man nicht zum MySQL Server verbinden kann, sollte man hier als erstes schauen ob der Server korrekt läuft.
MySQL Administrator
Der MySQL Administrator kann kostenfrei auf der MySQL-Website herunter geladen werden. (Alternativ kann auch der phpMyAdmin genutzt erden: http://www.phpmyadmin.net) Er hilft dabei Datenbanken zu verwalten, anzulegen und zu löschen, dass alles natürlich mit einem Grafischen Interface. Keine CommandLine und auch keine Tipperei in dieser. Sollten Probleme mit der Verbindung zur Datenbank auftreten:
Der Server Host sollte der Computername oder die IP sein, wo die MySQL-Datenbank drauf liegt. Sofern man diese auf dem eigenen Rechner für Testzwecke installiert hat, ist es der ‘localhost’.
Der Username ist ‘root’.
Das Passwort ist das Passwort, welches bei der Installation angegeben wurde. Leer lassen, sofern keins angegeben wurde.
Der Port ist ‘3306’ bzw. der der bei der Installation angegeben wurde.
The MySQL Connector .Net
Der MySQLConnector ist eine kostenlose Programmbibliothek von MySQL, für .Net. Die DLL ist zu finden unter:
C:\Program Files (x86)\MySQL\MySQL Connector Net 6.5.4\Assemblies\v4.0\MySql.Data.dll
oder der Pfad den man bei der Installation des Connectors angegeben hat.
Die erste C# Consolen Anwendung, welche MySQL nutzen soll
Es wurde alles Installiert ( MySQL Server, MySQL Administrator (phpMyAdmin) & MySQL Connector .net )
Nun muss eine Referenz auf den MYSQLConnector gesetzt werden. Dazu muss im Visual Studio unter ‘Verweise’, die ‘MySql.Data.dll’ ausgewählt werden. Dann kann man auch im Namespace per ‘using’ die Verweise setzen ( ‘using MySql.Data.MySqlClient;’ ). Zu finden unter:
C:\Program Files (x86)\MySQL\MySQL Connector Net 6.5.4\Assemblies\v4.0\MySql.Data.dll
Eine Verbindung zu öffnen und wieder zu schließen ist ganz einfach:
using System; using MySql.Data.MySqlClient; namespace ConsoleApplication1 { class ConnectToMySQL { [STAThread] static void Main(string[] args) { //create a MySQL connection with a query string MySqlConnection connection = new MySqlConnection("server=localhost;database=cs;uid=root;password=abcdaaa"); //open the connection connection.Open(); //close the connection connection.Close(); } } }
Der Query String sollte wie folgt aufgebaut werden:
server=$servername$;database=$databasename$;uid=$username$;password=$password$;
$servername$ = Der Name vom Server bzw. die IP (z.B.: ‘localhost’), wo drauf die Datenbank läuft.
$databasename$ = Name der Datenbank.
$username$ = Username des angelegten Users (‘root’).
$password$ = Passwort des Users.
Hier mal ein Beispiel für eine Methode, die einen konformen Connection String zusammen baut:
/// <summary> /// Generates a connection string /// </summary> /// <param name="server">The name or IP of the machine where the MySQL server is running</param> /// <param name="databaseName">The name of the database (catalog)</param> /// <param name="user">The user id - root if there are no new users which have been created</param> /// <param name="pass">The user's password</param> /// <returns></returns> public static string CreateConnStr(string server, string databaseName, string user, string pass) { //build the connection string string connStr = "server=" + server + ";database=" + databaseName + ";uid=" + user + ";password=" + pass + ";"; //return the connection string return connStr; }
Diese Methode generiert einen Connection String, den man nun im MySQLConnector Objekt Konstuktor nutzen kann.
Die Methode mit der neuen ‘CreateConnStr’ wird nun in die Consolen Anwendung implementiert:
using System; using MySql.Data.MySqlClient; namespace ConsoleApplication1 { class ConnectToMySQL { [STAThread] static void Main(string[] args) { //generate the connection string string connStr = CreateConnStr("localhost", "cs", "root", "abcdaa"); //create a MySQL connection with a query string MySqlConnection connection = new MySqlConnection(connStr); //open the connection connection.Open(); //close the connection connection.Close(); } /// <summary> /// Generates a connection string /// </summary> /// <param name="server">The name or IP of the machine where the MySQL server is running</param> /// <param name="databaseName">The name of the database (catalog)</param> /// <param name="user">The user id - root if there are no new users which have been created</param> /// <param name="pass">The user's password</param> /// <returns></returns> public static string CreateConnStr(string server, string databaseName, string user, string pass) { //build the connection string string connStr = "server=" + server + ";database=" + databaseName + ";uid=" + user + ";password=" + pass + ";"; //return the connection string return connStr; } } }
So, somit haben wir eine Verbindung zu einer MySQL Datenbank aufgebaut und diese wieder geschlossen. Nun kann man natürlich noch Datenbankabfragen mit einbauen, dies kommt dann aber in einem weiteren Artikel.
18 Januar, 2015 um 14:30
Frage zu MySql-Zugriff mit C# auf Web-Datenbank:
Aufruf funktioniert:
MySqlConnection conn = new MySqlConnection(“SERVER=localhost; DATABASE=db; UID=uid; PASSWORD=pw”);
conn.Open();
Aufruf funktioniert aus dem C#Programm nicht, obwohl ich mit den gleichen Parametern z.B. MySqlHeidi DB-Zugriff bekomme:
MySqlConnection conn = new MySqlConnection(“SERVER=mysql.1blu.de; DATABASE=db; UID=uid; PASSWORD=pw”);
conn.Open();
Müssen im C#Programm noch irgendwelche Web-Instanzen zwischengeschaltet werden?
Ich war der Annahme, dass using MySql.Data.MySqlClient genügt?
18 Januar, 2015 um 14:52
Hallo Gotthard,
ansich sollte das using ausreichen und der String auch korrekt sein. Kommt denn eine Exception? Was sagt diese?
Host, User / Password sind korrekt?
18 Januar, 2015 um 16:19
Danke für den ersten Hinweis.
Nachdem ich das try-catch entfernt habe und entsprechend der Fehlermeldung
„MySql.Data.MySqlClient.MySqlException (0x8000405) Authentification with old passsword no longer supported, use 4.1 style passwords” das Passwort geändert habe, klappt es noch immer nicht.
Kann es an der Version der …\MySQL\MySQL Connector Net 6.9.5\Assemblies\v4.0\MySql.Data.dll liegen?
Mein Provider 1blu verwendet MySql 5, meine locale Datenbank 5.1.53.
Bei der Installation durch WAMPP wurden für dieser Datenbank nun verschiedene Assemblies unter V2.0, v.4.0 und v.4.5 bereit gestellt. Ich hatte mich für v4.0 entschieden. Woran kann man die richtige erkennen?
18 Januar, 2015 um 16:53
Ich habe mal eben nach der Exception gegooglet und folgenden Beitrag gefunden: http://stackoverflow.com/questions/15772479/authentication-with-old-password-no-longer-supported-use-4-1-style-passwords
Versuch mal auf der Datenbank folgende auszuführen (vorher natürlich ein Backup machen!!)
SET old_passwords=0;
SET PASSWORD FOR user@host = PASSWORD('password');
Oder du probierst folgendes:
The solution in my case was to change the MySql Connector/NET library from version 6.* to version 5.*. After the change my application connected successfully.
Die Datenbankversion und MySqlversion hat nichts mit der .Net Version (2.0 / 4.0 / 4.5) zu tun 🙂
v4.0 sollte schon in Ordnung sein.
Habe hier noch was von MySql gefunden: http://forums.mysql.com/read.php?38,593423,593431#msg-593431
Laut denen wird ein “old password” in der neuen Version vom Connector nicht mehr unterstützt und man soll (sofern man das unsichere Verfahren nutzen möchte) eine ältere Version vom Connector verwenden.
20 Januar, 2015 um 11:01
Danke für Deine Unterstützung!
Die Datenbankverbindung zu meiner MySql-Datenbank bei 1blu aus einem C#Programm heraus funktioniert nun mit MySQL Connector Net 6.9.5 v4.0 und
MySqlConnection conn = new MySqlConnection(“SERVER=server; DATABASE=database; UID=uid; PASSWORD=41verschlüsseltespassword”);
Bei 1blu kann man die Passwortverschlüsselung im Kundenbereich selbst einstellen, was den obigen SET-Befehlen entspricht, sodass der Fehler „Authentication with old password no longer supported, use 4.1 style passwords“ nicht mehr auftritt.
20 Januar, 2015 um 11:19
Gerne! Und vielen Dank für die Auflösung des Fehlers! Schön das es jetzt geklappt hat 😀
19 November, 2017 um 18:11
Hallo ich habe mir das gerade mal durchgelesen.
diese variante funktioniert zwar aber ich sehr sehr unsicher.
Das mit dem “unsicher” stimmt insofern, dass man mit Tools wie JustDecompile das ganze dekompilieren kann und das Passwort im klartext sehen kann.
meine frage wäre jetzt.
wie erstelle ich eine sichere variante dazu ?
14 Dezember, 2019 um 21:38
Hallo.
Würde auch gerne wissen wie man dies auf sichere weiße realisieren kann.
Wie macht man es, wenn man eine Application für Kunden ausliefert und die alle von der selben Datenbank lesen und schreiben?
Da kann man ja nicht das Passwort mit ausliefern oder ?