[+/-]
Jegliche Interaktion zwischen einer .NET-Anwendung und einem
MySQL Server vollzieht sich durch ein
MySqlConnection
-Objekt. Also muss, ehe Sie
mit dem Server kommunizieren können, zunächst ein
MySqlConnection
-Objekt erzeugt,
konfiguriert und geöffnet werden.
Auch wenn die Klasse MySqlHelper
benutzt
wird, wird ein MySqlConnection
-Objekt von
dieser Hilfsklasse angelegt.
In diesem Abschnitt wird beschrieben, wie man über das
MySqlConnection
-Objekt mit MySQL Verbindung
aufnimmt.
Das MySqlConnection
-Objekt ist für einen
Verbindungs-String konfiguriert. Dieser String enthält
mehrere, durch Semikola getrennte Schlüssel/Wert-Paare, die
jeweils durch ein Gleichheitszeichen verbunden sind.
Sehen Sie hier ein Beispiel für einen Verbindungs-String:
Server=127.0.0.1;Uid=root;Pwd=12345;Database=test;
In diesem Beispiel ist das
MySqlConnection
-Objekt so konfiguriert,
dass es sich mit einem MySQL Server auf
127.0.0.1
verbindet und dazu den
Benutzernamen root
und das Passwort
12345
verwendet. Als Standarddatenbank für
alle Anweisungen benutzen wir test
.
Die folgenden Optionen werden typischerweise gesetzt (eine vollständige Liste der Optionen finden Sie in der nachfolgenden Tabelle):
Server
: Der Name oder die
Netzwerkadresse der MySQL-Instanz, mit der Verbindung
aufgenommen werden soll. Der Standardwert ist
localhost
. Aliase sind
host
, Data Source
,
DataSource
, Address
,
Addr
und Network
Address
.
Uid
: Das MySQL-Benutzerkonto, das für
die Verbindung genutzt wird. Aliase sind User
Id
, Username
und
User name
.
Pwd
: Das Passwort für das verwendete
MySQL-Konto. Der Alias Password
kann
ebenfalls gesetzt werden.
Database
: Die Standarddatenbank, auf
die alle Anweisungen angewendet werden. Der Standardwert
lautet mysql
, aber es kann auch der
Alias Initial Catalog
verwendet werden.
Port
: Der Port, auf dem MySQL auf
Verbindungen lauscht. Der Standardwert ist
3306
. Wenn Sie hier
-1
einsetzen, wird eine
Named-Pipe-Verbindung verwendet.
Die folgende Tabelle führt die Namen für alle zulässigen
Schlüsselwortwerte des ConnectionString
s
auf.
Name | Standardwert | Beschreibung |
Connect Timeout -oder- Connection Timeout | 15 | So viele Sekunden wird auf eine Serververbindung gewartet, ehe der Versuch abgebrochen und ein Fehler ausgelöst wird. |
Host -oder- Server -oder- Data Source -oder- DataSource -oder- Address -oder- Addr -oder- Network Address | localhost | Name oder Netzwerkadresse der MySQL-Instanz, mit der Verbindung aufgenommen wird. Es können mehrere, durch & getrennte Hosts angegeben werden. Das kann praktisch sein, wenn mehrere MySQL Server für die Replikation konfiguriert wurden und Sie nicht wissen, mit welchem Server Sie sich verbinden. Da der Provider Schreibvorgänge auf der Datenbank nicht synchronisiert, müssen Sie mit dieser Option vorsichtig sein. In einer Unix-Umgebung mit Mono kann dies ein vollqualifizierter Pfad zu einer MySQL-Socketdatei sein. Dann wird der Unix-Socket anstelle des TCP/IP-Sockets benutzt. Da zurzeit nur ein einziger Socketname angegeben werden kann, wird der MySQL-Zugriff in einer Replikationsumgebung über Unix-Sockets aktuell noch nicht unterstützt. |
Port | 3306 | Der Port, auf dem MySQL auf Verbindungen lauscht. Wenn Sie hier -1 angeben, wird eine Named-Pipe-Verbindung benutzt (nur Windows). Dieser Wert wird bei Verwendung von Unix-Socket ignoriert. |
Protocol | socket | Gibt an, welche Art von Serververbindung eingerichtet wird. Mögliche Werte sind: socket oder tcp für eine Socketverbindung, pipe für eine Named-Pipe-Verbindung, unix für eine Unix-Socketverbindung und memory für MySQL-Shared Memory |
CharSet -oder- Character Set | Der Zeichensatz, mit dem alle an den Server gesandten Anfragen kodiert werden. Ergebnismengen werden weiterhin in dem Zeichensatz der Rückgabedaten kodiert. | |
Logging | false | Ist diese Option true, werden diverse Informationen an die eingestellten TraceListeners ausgegeben. |
Allow Batch | true | Ist diese Option true, können mehrere SQL-Anweisungen mit einem einzigen Befehl ausgeführt werden. Hinweis: Seit MySQL 4.1.1 müssen Batch-Anweisungen durch das für den Server definierte Trennzeichen voneinander abgesetzt werden. Für frühere Versionen von MySQL ist ';' das Trennzeichen. |
Encrypt | false | Ist diese Option true , wird für alle zwischen Client
und Server übermittelten Daten SSL-Verschlüsselung
verwendet, wenn auf dem Server ein Zertifikat
installiert ist. Zulässige Werte sind
true , false ,
yes und no .
Hinweis: Dieser
Parameter ist zurzeit wirkungslos. |
Initial Catalog -oder- Database | mysql | Der Name der Datenbank, die anfangs genutzt wird |
Password -oder- pwd | Das Passwort für das verwendete MySQL-Konto | |
Persist Security Info | false | Ist diese Option false oder no
(was dringend empfohlen wird), werden
sicherheitsrelevante Daten wie beispielsweise das
Passwort nicht mit der Verbindung zurückgegeben, wenn
die Verbindung geöffnet ist oder jemals war. Mit dem
Verbindungs-String werden auch alle darin enthaltenen
Werte zurückgesetzt, einschließlich des Passworts.
Zulässige Werte sind true ,
false , yes und
no . |
User Id -oder- Username -oder- Uid -oder- User name | Das für das Login verwendete MySQL-Konto | |
Shared Memory Name | MYSQL | Der Name des Shared Memory-Objekts, das für die Kommunikation genutzt wird, wenn das Verbindungsprotokoll auf "memory" gesetzt wurde. |
Allow Zero Datetime | false | Stellen Sie dies auf true, wenn MySqlDataReader.GetValue() für Datums-/Uhrzeitspalten, die unzulässige Werte aufweisen, eine MySqlDateTime zurückgeben soll, und auf false, wenn nur für zulässige Werte ein DateTime-Objekt, aber für unzulässige eine Ausnahme zurückgegeben werden soll. |
Convert Zero Datetime | false | Ist diese Option true, geben MySqlDataReader.GetValue() und MySqlDataReader.GetDateTime() für Datums- oder Datums-/Uhrzeitspalten, die unzulässige Werte aufweisen, DateTime.MinValue zurück. |
Old Syntax -oder- OldSyntax | false | Erlaubt '@' als Parameterkennzeichen. Mehr darüber in
MySqlCommand . Dient nur der
Kompatibilität. Zukünftig soll immer das
Parameterkennzeichen '?' benutzt werden. |
Pipe Name -oder- Pipe | mysql | Ist diese der Name einer Named Pipe, versucht
MySqlConnection , diese zur
Verbindung zu nutzen. Gilt nur für Windows. |
Sobald Sie den Verbindungs-String angelegt haben, können Sie ihn nutzen, um eine Verbindung zu einem MySQL Server damit aufzubauen.
Der folgende Code erzeugt ein
MySqlConnection
-Objekt, weist den
Verbindungs-String zu und öffnet die Verbindung.
Visual Basic-Beispiel
Dim conn As New MySql.Data.MySqlClient.MySqlConnection Dim myConnectionString as String myConnectionString = "server=127.0.0.1;" _ & "uid=root;" _ & "pwd=12345;" _ & "database=test;" Try conn.ConnectionString = myConnectionString conn.Open() Catch ex As MySql.Data.MySqlClient.MySqlException MessageBox.Show(ex.Message) End Try
C#-Beispiel
MySql.Data.MySqlClient.MySqlConnection conn; string myConnectionString; myConnectionString = "server=127.0.0.1;uid=root;" + "pwd=12345;database=test;"; try { conn = new MySql.Data.MySqlClient.MySqlConnection(); conn.ConnectionString = myConnectionString; conn.Open(); } catch (MySql.Data.MySqlClient.MySqlException ex) { MessageBox.Show(ex.Message); }
Sie können den Verbindungs-String auch an den
Klassenkonstruktor von MySqlConnection
übergeben:
Visual Basic-Beispiel
Dim myConnectionString as String myConnectionString = "server=127.0.0.1;" _ & "uid=root;" _ & "pwd=12345;" _ & "database=test;" Try Dim conn As New MySql.Data.MySqlClient.MySqlConnection(myConnectionString) conn.Open() Catch ex As MySql.Data.MySqlClient.MySqlException MessageBox.Show(ex.Message) End Try
C#-Beispiel
MySql.Data.MySqlClient.MySqlConnection conn; string myConnectionString; myConnectionString = "server=127.0.0.1;uid=root;" + "pwd=12345;database=test;"; try { conn = new MySql.Data.MySqlClient.MySqlConnection(myConnectionString); conn.Open(); } catch (MySql.Data.MySqlClient.MySqlException ex) { MessageBox.Show(ex.Message); }
Sobald die Verbindung geöffnet ist, können auch andere Connector/NET-Klassen sie zur Kommunikation mit dem MySQL Server nutzen.
Da eine Verbindung mit einem externen Server immer
Unwägbarkeiten in sich birgt, muss Ihre .NET-Anwendung auch
mit Fehlern umgehen können. Tritt bei der Verbindung ein
Fehler auf, gibt die Klasse MySqlConnection
ein MySqlException
-Objekt zurück. Dieses
Objekt hat zwei Eigenschaften, die für die Fehlerbehandlung
interessant sind:
Message
: eine Meldung, die die Ausnahme
beschreibt
Number
: die MySQL-Fehlernummer
Sie können die Reaktion Ihrer Anwendung auf Fehler auf der Basis der Fehlernummer gestalten. Die beiden Fehler, die bei Verbindungsproblemen am häufigsten auftreten, sind:
0
: Serververbindung nicht möglich
1045
: Benutzername und/oder Passwort
ungültig
Der folgende Code zeigt, wie die Anwendung auf die jeweilige Fehlernummer reagieren kann:
Visual Basic-Beispiel
Dim myConnectionString as String myConnectionString = "server=127.0.0.1;" _ & "uid=root;" _ & "pwd=12345;" _ & "database=test;" Try Dim conn As New MySql.Data.MySqlClient.MySqlConnection(myConnectionString) conn.Open() Catch ex As MySql.Data.MySqlClient.MySqlException Select Case ex.Number Case 0 MessageBox.Show("Cannot connect to server. Contact administrator") Case 1045 MessageBox.Show("Invalid username/password, please try again") End Select End Try
C#-Beispiel
MySql.Data.MySqlClient.MySqlConnection conn; string myConnectionString; myConnectionString = "server=127.0.0.1;uid=root;" + "pwd=12345;database=test;"; try { conn = new MySql.Data.MySqlClient.MySqlConnection(myConnectionString); conn.Open(); } catch (MySql.Data.MySqlClient.MySqlException ex) { switch (ex.Number) { case 0: MessageBox.Show("Cannot connect to server. Contact administrator"); case 1045: MessageBox.Show("Invalid username/password, please try again"); } }
Wichtig: Wenn Sie Datenbanken
mit mehreren Sprachen verwenden, müssen Sie den jeweiligen
Zeichensatz im Verbindungs-String angeben, sonst wird
latin1
als Standardzeichensatz zugrunde
gelegt. Ein Beispiel für die Angabe eines Zeichensatzes im
Verbindungs-String folgt:
MySqlConnection myConnection = new MySqlConnection("server=127.0.0.1;uid=root;" + "pwd=12345;database=test;Charset=latin1;");
Dies ist eine Übersetzung des MySQL-Referenzhandbuchs, das sich auf dev.mysql.com befindet. Das ursprüngliche Referenzhandbuch ist auf Englisch, und diese Übersetzung ist nicht notwendigerweise so aktuell wie die englische Ausgabe. Das vorliegende deutschsprachige Handbuch behandelt MySQL bis zur Version 5.1.