Codefieber.de

IT-Blog

MySQL Connection mit C# .Net

| 8 Kommentare

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.

avatar

Autor: Pascal

Codefieber.de wird von Pascal Betke geführt, administriert und gestaltet. Alle Inhalte sind persönlich von mir ausgewählt und erstellt, nach bestem Gewissen und Können, was die Möglichkeit von Fehlern nicht ausschließt.

8 Kommentare

  1. avatar

    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?

    • avatar

      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?

  2. avatar

    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?

  3. avatar

    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.

  4. avatar

    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 ?

  5. avatar

    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 ?

Schreibe einen Kommentar

Pflichtfelder sind mit * markiert.