Seit MySQL 4.1 ist es möglich, vorbereitete Anweisungen mit Connector/NET zu verwenden. Diese können bei Anfragen, die immer wieder ausgeführt werden müssen, die Leistung massiv steigern.
Die vorbereitete Ausführung von Anweisungen ist viel schneller als die direkte Ausführung, da die Anfrage nur ein einziges Mal geparst werden muss. Bei einer Direktausführung müsste sie jedes Mal von neuem geparst werden. Außerdem kann die vorbereitete Ausführung die Netzwerklast reduzieren, da bei der Ausführung einer vorbereiteten Anweisung nur die Parameterdaten übermittelt werden müssen.
Ein weiterer Vorteil vorbereiteter Anweisungen ist die Verwendung eines Binärprotokolls, das die Datenübertragung zwischen Client und Server beschleunigt.
Um eine Anweisung vorzubereiten, erzeugen Sie ein
Befehlsobjekt und stellen die Eigenschaft
.CommandText
auf Ihre Anfrage ein.
Nach dem Eintritt in die Anweisung rufen Sie die
.Prepare
-Methode des
MySqlCommand
-Objekts auf. Ist die Anweisung
vorbereitet, fügen Sie die Parameter für die dynamischen
Elemente der Anfrage hinzu.
Danach führen Sie die Anweisung mit
.ExecuteNonQuery()
-,
.ExecuteScalar()
- oder
.ExecuteReader
-Methoden aus.
Für jede weitere Ausführung müssen Sie nur noch die
Parameterwerte einstellen und dann die Ausführungsmethode
erneut aufrufen. Es ist nicht mehr erforderlich, die
.CommandText
-Eigenschaft zu setzen oder die
Parameter umzudefinieren.
Visual Basic-Beispiel
Dim conn As New MySqlConnection Dim cmd As New MySqlCommand conn.ConnectionString = strConnection Try conn.Open() cmd.Connection = conn cmd.CommandText = "INSERT INTO myTable VALUES(NULL, ?number, ?text)" cmd.Prepare() cmd.Parameters.Add("?number", 1) cmd.Parameters.Add("?text", "One") For i = 1 To 1000 cmd.Parameters["?number"].Value = i cmd.Parameters["?text"].Value = "A string value" cmd.ExecuteNonQuery() Next Catch ex As MySqlException MessageBox.Show("Error " & ex.Number & " has occurred: " & ex.Message, "Error", MessageBoxButtons.OK, MessageBoxIcon.Error) End Try
C#-Beispiel
MySql.Data.MySqlClient.MySqlConnection conn; MySql.Data.MySqlClient.MySqlCommand cmd; conn = new MySql.Data.MySqlClient.MySqlConnection(); cmd = new MySql.Data.MySqlClient.MySqlCommand(); conn.ConnectionString = strConnection; try { conn.Open(); cmd.Connection = conn; cmd.CommandText = "INSERT INTO myTable VALUES(NULL, ?number, ?text)"; cmd.Prepare(); cmd.Parameters.Add("?number", 1); cmd.Parameters.Add("?text", "One"); for (int i=1; i <= 1000; i++) { cmd.Parameters["?number"].Value = i; cmd.Parameters["?text"].Value = "A string value"; cmd.ExecuteNonQuery(); } } catch (MySql.Data.MySqlClient.MySqlException ex) { MessageBox.Show("Error " + ex.Number + " has occurred: " + ex.Message, "Error", MessageBoxButtons.OK, MessageBoxIcon.Error); }
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.