Doberenz_gewinnus_ Arrays mit LINQ initialisieren5In dieser Blogserie möchten wir Ihnen eine kleine Auswahl aus den „Rezepten“ unserer neuen Titel Visual Basic 2015 und Visual C# 2015 präsentieren, und Ihnen als künftigen oder fortgeschrittenen VB- oder C#-Programmierer, einen Vorgeschmack darauf geben, wie Sie einzelne Komponenten für das Microsoft .NET Framework programmieren können. Die ersten Rezepte, Arrays mit LINQ initialisieren und Echte ZIP-Dateien erstellen, haben wir Ihnen schon geliefert, heute geht es darum, eine Aktionsabfrage aufzurufen.

Los gehts mit dem dritten Visual Basic-Rezept, Eine Aktionsabfrage ausführen:

Wir wollen an die Nordwind.mdb-Beispieldatenbank folgendes SQL-Statement absetzen:

UPDATE Kunden SET Firma = ‚Londoner Firma‘ WHERE Ort = ‚London‘

Das vorliegende Beispiel zeigt, wie Sie dazu die ExecuteNonQuery-Methode des Command
Objekts verwenden können.

Oberfläche

Sie brauchen ein DataGridView, zwei TextBoxen, zwei Buttons und einige Labels (siehe Laufzeitansicht). Beide TextBoxen sollen dazu dienen, dass Sie die Einträge für den Firmennamen und den Ort zur Laufzeit verändern können.

Quellcode

Für das Ausführen des Beispiels wären eigentlich ein Connection– und ein Command-Objekt völlig aus­reichend. Da wir uns aber auch von der Wirkung des UPDATE-Befehls überzeugen wollen, müssen wir einigen zusätzlichen Aufwand für die Anzeige betreiben: Das DataGridView benötigt ein DataSet als Datenquelle, welches wiederum von einem DataAdapter gefüllt wird.

Imports System.Data.OleDb

Public Class Form1
   Private conn As New OleDbConnection("Provider=Microsoft.Jet.
   OLEDB.4.0;Data Source=Nordwind.mdb;")
   Private ds As New DataSet()
   Private cmd As New OleDbCommand()
Aktionsabfrage starten:
   Private Sub Button1_Click(sender As Object, e As EventArgs) 
   Handles Button1.Click
       Dim da As New OleDbDataAdapter("SELECT Firma, Kontaktperson, 
       Ort FROM Kunden ORDER BY Firma", conn)
       ds.Clear()
       cmd.Connection = conn
Das "Zusammenbasteln" des UPDATE-Strings verlangt etwas Fingerspitzengefühl, 
darf man doch auch die Apostrophe ('), die die Feldbezeichner einschließen, 
nicht vergessen:
       cmd.CommandText = "UPDATE Kunden SET Firma = '" & TextBox1.Text & "' 
       WHERE Ort = '" & TextBox2.Text & "'"
Sicherheitshalber haben wir diesmal den kritischen Programmteil 
in eine Fehlerbehandlungs­routine einge­baut:
       Try
           conn.Open()
Die folgende Anweisung führt den UPDATE-Befehl aus und zeigt gleichzeitig 
die Anzahl der in der Daten­bank geänderten Datensätze an:
           Label1.Text = cmd.ExecuteNonQuery().ToString()
       Catch ex As Exception
           MessageBox.Show(ex.Message)
       End Try
       da.Fill(ds, "Kunden")
       conn.Close()
Das DataGridView an das DataSet "anklemmen":
       DataGridView1.DataSource = ds
       DataGridView1.DataMember = "Kunden"
   End Sub

End Class

Test

Stimmt die Verbindungszeichenfolge des Connection-Objekts, dürfte es keine

Probleme beim Ausprobieren unterschiedlicher Updates geben.

Abb. Echte ZIP-Dateien erstellen aus dem Fachbuch Visual Basic 2015 von Walter Doberenz und Thomas Gewinnus, Carl Hanser Verlag, München 2015.

Abb. Echte ZIP-Dateien erstellen aus dem Fachbuch Visual Basic 2015 von Walter Doberenz und Thomas Gewinnus, Carl Hanser Verlag, München 2015.

Bemerkungen

  • Bei SQL-Aktionsabfragen werden keine Datensätze gelesen bzw. zurückgeliefert, sondern es geht lediglich um direkte Änderungen in der Datenquelle per SQL-Befehl (UPDATE, INSERT, DELETE). Ein DataSet ist dabei nicht beteiligt!
  • Wie Sie die Änderungen zuerst in einer DataTable vornehmen und erst danach in die Datenbank zurückschreiben, erfahren Sie im Praxisbeispiel
    • Fehler: Referenz nicht gefunden Fehler: Referenz nicht gefunden