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 ]


Kick It auf dotnet-kicks.de
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

Robert Mühsig (@robert0muehsig) ist Webentwickler und beschäftigt sich mit Web-Frameworks (vor allem dem ASP.NET MVC Framework) und scheut sich auch nicht vor Javascript. Ansonsten bloggt er über all jene Probleme, die ihm über den Weg laufen. Seit 2008 ist er Microsoft MVP für ASP.NET und er arbeitet bei der T-Systems Multimedia Solutions GmbH in Dresden. Treffen kann man ihn online via Twitter (@robert0muehsig) oder dieser Seite oder bei der .NET User Group Dresden.

9 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
  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

Comment on this post

Letzte Posts

  • image.png
    RavenHQ–RavenDB in der Cloud

    Ayende Rahien hat es heute verkündet – RavenHQ, der RavenDB Cloud Hoster (natürlich von und mit Ayende) ist ab heute raus aus der Beta und man kann es von überall aus nutzen. In der Betaphase waren nur Nutzer von AppHarbor zugelassen. Was ist RavenHQ? RavenHQ ist im Grunde ein gehostes RavenDB in den Rechenzentren von ...

  • image.png
    GitHub for Windows–erste Eindrücke

    Git ist schon eine tolle Sachen und eröffnet viele neue Möglichkeiten – allerdings ist der Einstieg recht hart und selbst wenn man die guten Hilfsanleitungen auf GitHub befolgt, kommt man am Anfang nur langsam vorwärt. Insbesondere ist das Tooling für Windows / .NET Entwickler auch nicht gerade “bekanntes Terrain”. GitHub to the rescue! Die GitHub ...

  • image.png
    Chocolatey–apt-get für Windows

    Durch Zufall bin ich auf das Tool “Chocolatey” gestoßen. Wer die Website sich anschaut, wird evtl. eine Verwandschaft mit NuGet ausmachen. Was macht Chocolatey? Chocolatey ist ein “Maschine Package Manager”, das bedeutet, dass man für seine Maschine einfach Tools runterladen und Updaten kann – direkt über die Konsole. Was ist der Unterschied zu NuGet? NuGet ...

  • image.png
    SASS, LESS & Coffeescript in Visual Studio mit der Web Workbench

    CSS und Javascript sind die “kleinste” Schnittmenge von allen Browsern für die Erstellung von Web-Applikationen. Leider geht dabei etwas komfort verloren, daher lieben alle Webentwickler jQuery! SASS und LESS sind zwei Varianten, wie man “schöner” CSS schreiben kann und Coffeescript versucht Javascript Entwicklung zu vereinfachen. Aber immer der Reihe nach… Was ist SASS? SASS steht ...

  • image.png
    Code-Inside Sample nun auf GitHub: Google Code zu GitHub Migration

    Seit einiger Zeit habe ich Beispielcode auf Google Code bereitgestellt. Einfach nur noch weg von Google Code O-Ton damals war: Ich hatte mich für Google Code entschieden, weil ich hoffe dass früher oder später die Google Code Suche nutzbar ist und es dadurch wenigstens ein kleiner Mehrwert entsteht. Allerdings wirft es momentan noch ein Fehler. ...

Auf Amazon einkaufen & unterstützen

Facebook