HowTo: Datenbankverbindungen – .NET & MySQL

In diesem HowTo ging es um die Datenverbindung zwischen .NET und MS SQL. Natürlich bietet .NET von Haus aus einen MS SQL Provider, aber wie sieht es mit MySQL aus? Wie kann man mit .NET auf eine MySQL Datenbank zugreifen?

Daher geht es um dieses Thema:

Heute: .NET und MySQL

Das Testprojekt wird ähnlich wie das MS SQL Beispiel sein.

  • Benötigte Software:

Die Datenbank Software MySQL – aus Einfachheitsgründen nehmen wir einfach ein vorgefertigtes Paket, welches unter PHP Entwicklern wohl bekannt ist: XAMPP – Apache, PHP, MySQL etc. im Bundel. Wer bereits einen MySQL Server hat braucht das natürlich nicht.
Um mit .NET darauf zuzugreifen benötigen wir noch den MySQL Daten Provider – MySQL Connector .NET 5.0.
(und natürlich VS – siehe erstes HowTo).

  • Test Datenbank erstellen (MySQL mit XAMPP)

Sobald XAMPP erfolgreich auf dem System installiert wurde, öffnet man das Control Panel und startet den Apachen sowie den MySQL Server.

image

Bei Vista (und wahrscheinlich auch bei XP SP2) meckert die Firewall – die beiden Sachen nicht blocken.

Unter der Webadresse http://localhost/xampp/index.php findet man nun das Administrationspanel. Im Menü auf der linken Seite befindet sich der für uns wichtigste Punkt:

image

Über phpMyAdmin legen wir unser Datenbank an (“dotnet“) und dann unsere Tabelle “test“ mit Spalte “id” als “autoincrement int” und “value” als “varchar” für unseren Text.

image

Danach auf “Speichern” und fertig ist unser DB.

Wichtig: Den MySQL Server die ganze Zeit über anlassen – den brauchen wir bis zuletzt ;)

  • MySQL Connector installieren

Damit wir einen MySQL Datenprovider bekommen, müssen wir nun den Connector installieren.

  • Konsolenprogramm erstellen

In unserem Konsolenprogramm fügen wir nun noch die Referenz zu der MySQL.Data DLL hinzu, sodass wir den Namespace später verwenden können:

image

Unter dem Punkt “MySQL.Data” finden wir dann unseren Connector:

image

Dadurch steht uns jetzt die Namespaces MySql.Data & MySql.Data.MySqlClient zur verfügen welche wir einbinden:

using MySql.Data;
using MySql.Data.MySqlClient;

Teil 1: DB Verbindung öffnen

Der Namespace MySqlClient enthält alles was wir generell brauchen und ist ähnlich sturkturiert wie SqlClient für MS SQL. Anstatt einer SqlConnection Klasse gibt es halt eine MySqlConnection Klasse.

            MySqlConnection connection = new MySqlConnection(@"Server=127.0.0.1;Uid=root;Pwd=;Database=dotnet;");
            connection.Open();

Wichtig: Der Connectionsstring ist etwas anders – MySQL stellt allerdings ein kleines Tutorial bereit, sowie bei speziellen Fragen auch ein Forum.
Achtung: DB Verbindung wird am Ende unseres Beispieles wieder geschlossen.

Teil 2: Werte in die DB schreiben

Hier sieht man ebenfalls die Anlehnung an die SqlCommand Klasse – es gibt eine MySqlCommand Klasse, welche alle (bzw. die “wichtigsten”) Methoden ebenso enthält:

            MySqlCommand insertCommand = new MySqlCommand("INSERT INTO test (value) VALUES ('Test')", connection);
            int i = insertCommand.ExecuteNonQuery();

Teil 3: Werte aus der DB lesen

Für das befüllen eines Datasets oder einer Datatable gibt es den MySqlDataAdapter mit der “Fill(…)” Methode (gleiches System wie bei MS SQL, nur mal mit MySql davor ;) ).

            MySqlCommand readCommand = new MySqlCommand("SELECT * FROM test", connection);
            MySqlDataAdapter adapter = new MySqlDataAdapter(readCommand);
            DataTable datatable = new DataTable();  

            adapter.Fill(datatable);
            for (int x = 0; x < datatable.Rows.Count; x++)
            {
                object[] values = datatable.Rows[x].ItemArray;
            }

Teil 4: Daten in der DB ändern

Ebenso implementieren wie das schreiben von Daten, nur anderes SQL Statement & wieder benutzen wir MySqlCommand dafür.

            MySqlCommand updateCommand = new MySqlCommand("UPDATE test SET value = 'UpdatedTest'", connection);
            int updatedReturnValue = updateCommand.ExecuteNonQuery();

Teil 5: Daten aus der DB löschen

Ebenso wie oben beschrieben & gleiches Prinzip wie bei unserem MS SQL Beispiel.

                MySqlCommand deleteCommand = new MySqlCommand("DELETE FROM test", connection);
                int deleteReturnValue = deleteCommand.ExecuteNonQuery();
 image

Abschließende Bemerkung

Der .NET Connector von MySQL erlaubt es auf sehr einfache Art und Weise auf eine MySQL DB zuzugreifen – wer bereits mit MS SQL und .NET zutun hatte, kann ebenso “leicht” mit MySQL arbeiten. Die tiefergehenden Sachen sollten dann direkt bei MySql nachgeschaut werden, wie z.B. der Zugriff auf gespeicherte Prozeduren oder BLOB Daten verarbeiten.
Wie auch bei dem MS SQL Beispiel gilt auch hier: Der Code soll nur demonstrieren, wie man ganz primitiv auf die DB zugreift. Es gibt bestimmt bessere Methoden, allerdings soll dies nur eine Einführung sein und zeigt schon ganz gut, das man .NET und MySQL auch sehr gut zusammen nutzen kann.

Infos für den Source Code:

Die Tabelle sollte “test” heißen und die Spalten “id” und “value”. Die Datenbank sollte “dotnet” heißen oder der Connectionstring sollte geändert werden. Falls man eine bereits eingerichtete MySql DB nutzt, muss man natürlich die Zugangsdaten entsprechend anpassen.

[ Download Source Code ]

Wenn dir der Blogpost gefallen hat, dann hinterlasse doch einen Kommentar. Wenn du auf dem Laufenden bleiben willst, abonniere unseren RSS Feed oder folge uns auf Twitter.

About the author

Written by Robert Mühsig

Hi, ich bin Robert Mühsig und bin Webentwickler und beschäftige mich mit Web-Frameworks auf dem Microsoft Web Stack und scheue mich auch nicht vor Javascript. Der Blog begann als "Problemsammelstelle und Lösungshilfe" und seitdem schreibe ich hier alles auf. Seit 2008 bin ich Microsoft MVP für ASP.NET. Treffen kann man mich online via Twitter (@robert0muehsig) oder hier.

11 Responses

  1. Hallo,
    ich bin Azubi zum Fachinformatiker.
    Da freut man sich immer, wenn man so tolle Hilfestellungen wie diese hier findet, um beim Selbststudium voran zu kommen.

    Dabei finde ich es jedoch schade, dass man hier Code-Fragmente mit dem IE-7 nicht lesen kann, auf welchen ich jedoch z.B. auf Arbeit angewiesen bin.

    Einzelne Code-Zeilen gehen über die rechte Seite hinaus und verschwinden hinter den "Buchempfehlungen" und was sonst noch in der rechten Spalte zu finden ist.

    Ansonsten, super Sache Danke.

    Reply
  2. Hallo,
    der Artikel ist bereits etwas älter – die neuern HowTos werden über ein spezielles WordPress Plugin "verschönert", sodass der hässliche Effekt (der auch im FF auftritt) unterbunden.
    Zur Not einfach den Sourcecode runterladen :)

    Reply
  3. Hallo,

    mit Strg C und dann mit Strg V kann man den abgeschnittenen Code in z.B. Word kopieren. Vielen Dank für den schönen Artukel!

    Gruß
    Christoph

    Reply
  4. Hallo,

    kann nur Bestätigen- Super Beitrag.

    Gruß
    Hans 

    Reply
  5. Der Artikel ist sehr hilfreich, wenn man mit der MySql-API für .NEt nicht vertraut ist.

    Ein Kleinigkeit ist mir aufgefallen:
    Wenn ich einen MySqlConnection-String mit “Pwd=;” aber ohne eigentliches Passwort zu öffnen versuche, fliegt mir eine “KeyNotFoundException” um die Ohren.
    Der “Pwd=;”-String darf da nicht drinstehen, wenn es kein Passwort gibt.
    Das Ganze kann natürlich auch an meiner Version liegen…

    Danke nochmals.

    Reply
  6. Guter Beitrag!
    Was ich noch wichtig finde:

    Es gibt Datenbankunabhängige Klassen und Interfaces. Dadurch kann bei einem Datenbankwechsel auf eine Änderung im Code sogar verzichtet werden.

    DbProviderFactory
    DbConnection, IDbConnection
    DbCommand, IDbCommand
    DbParameter, IDbParameter

    Reply
    • Nein. durch die Datenbankunabhängigen Klassen und Interfaces kann NICHT auf eine Ändern im Code verzichtet werden ;)
      Habe es ausprobiert. Klappt nicht..

      Reply
  7. Die Laufleiste am rechten Homepage-Rand verdeckt grosse Teile des Codes und der Bilder. Vielleicht die Webseitenbreite auf auto setzen?

    Ansonsten: Gutes Tutorial, hat mir geholfen. :)

    Reply
  8. Und offenbar kann ich nicht lesen, sonst haett ich das angesprochene schon in den Kommentaren entdeckt. :(

    Reply
  9. Guter Beitrag!
    Was ich noch wichtig finde:

    Es gibt Datenbankunabhängige Klassen und Interfaces. Dadurch kann bei einem Datenbankwechsel auf eine Änderung im Code sogar verzichtet werden.

    DbProviderFactory
    DbConnection, IDbConnection
    DbCommand, IDbCommand
    DbParameter, IDbParameter

    Reply

Comment on this post

Letzte Posts

  • image.png
    Wieviel Speicher belegt meine RavenDB? Und welchen Plan benötige ich bei CloudBird oder RavenHQ?

    Wer RavenDB nicht auf seinem eigenen Server betreiben möchte oder einfach wissen möchte wieviel Speicherplatz die eigentlichen Daten benötigen gibt es zwei Möglichkeiten: Falls es noch einen anderen Weg gibt: Immer her damit – aktuell hab ich nur die beiden Methoden gefunden und sie scheinen mehr oder weniger zu passen. RavenDB Storage per JSON über ...

  • image_thumb.png
    Powershell – Output “formatieren” und Details anzeigen

    Die Powershell ist ein prima Werkzeug und immer mehr System-Tools und Dienste stellen Powershell Module zur Verfügung. Da ich aber nur “am Rande” mit Powershell zutun habe bin ich auf ein nettes Detail gestossen, welches vermutlich bei den erfahreneren Powershell Usern maximal ein müdes Lächeln hervorruft: Ps-Cmd | Format-List etc. Um den Text-Output zu formatieren ...

  • clip_image002.jpg
    Rabatt-Code & Freiticket für die Developer Week 2013

    Nach langer Zeit haben wir mal wieder ein kleines Angebot für euch: Wir sind Medienpartner der Developer Week 2013 und über uns könnt ihr günstiger an Tickets herankommen. Mit dem Code DWX13coi könnt ihr von Sonderkonditionen profitieren (= Ticketpreise werden niedriger & keine bösen Überraschungen). Die Developer Week (DWX) bündelt vom 24.-27. Juni 2013 in ...

  • image.png
    IIS & Windows Authentication – Troubleshooting mit Negotiate & NTLM

    Windows Authentifizierung ist eine einfache (und naheliegende) Authentifizierungs-Option für “Haus-interne” Webapplikationen. Setup Im IIS selbst kann man die Windows Authentifzierung sehr leicht anschalten: Natürlich kann man dies auch über die web.config steuern: <system.web> ... <authentication mode="Windows"/> ... </system.web> ... Fehlermeldung “HTTP Error 401.2 – Unauthorized”: Dies kann (wie fast immer) viele Gründe haben, z.B. weil ...

  • image.png
    Json-Online-Tools: Viewer & Json2Csharp Generator

    Wo APIs im Spiel sind, ist das JSON Format nicht weit. Da ich immer mal wieder zwei Tools benutze, möchte ich diese hier auch mal kurz würdigen. JSON Viewer Wer nur den JSON-Text vor sich hat sieht meist die Struktur nicht. Über JSON Viewer kann man sich recht einfach einen Überblick verschaffen: [URL] JSON2CSharp Der ...

Unterstützt von…

Facebook