VB.NET – Nutzung von ADO - luis.uni- · PDF fileVB.NET und Datenbanken, 25.01.10 Seite 4...

114
VB.NET – Nutzung von ADO.NET

Transcript of VB.NET – Nutzung von ADO - luis.uni- · PDF fileVB.NET und Datenbanken, 25.01.10 Seite 4...

Page 1: VB.NET – Nutzung von ADO - luis.uni- · PDF fileVB.NET und Datenbanken, 25.01.10 Seite 4 Namespace importieren Mit Hilfe von Imports wird ein Namespace (Namensraum) dem Programm

VB.NET – Nutzung von ADO.NET

Page 2: VB.NET – Nutzung von ADO - luis.uni- · PDF fileVB.NET und Datenbanken, 25.01.10 Seite 4 Namespace importieren Mit Hilfe von Imports wird ein Namespace (Namensraum) dem Programm

VB.NET und Datenbanken, 25.01.10 Seite 2

ADO.NET

… bietet einen Zugriff auf relationale Datenbanken. … ist eine Programmierschnittstelle für den Zugriff auf Daten. … ist Bestandteil des .NET Frameworks ActiveX Data Objects.NET … im Web:

http://msdn.microsoft.com/de-de/ library/e80y5yhx.aspx

Page 3: VB.NET – Nutzung von ADO - luis.uni- · PDF fileVB.NET und Datenbanken, 25.01.10 Seite 4 Namespace importieren Mit Hilfe von Imports wird ein Namespace (Namensraum) dem Programm

VB.NET und Datenbanken, 25.01.10 Seite 3

OleDB-Verbindung herstellen

Imports System.Data.OleDbPublic Class frmAllAdressShow Private Sub frmAllAdressShow_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load Dim dbConnect As New OleDbConnection("Provider=Microsoft.ACE.OLEDB.12.0;Data Source=..\datenbank\kundenAdresse.accdb") dbConnect.Open() dbConnect.Close()

End SubEnd Class

Page 4: VB.NET – Nutzung von ADO - luis.uni- · PDF fileVB.NET und Datenbanken, 25.01.10 Seite 4 Namespace importieren Mit Hilfe von Imports wird ein Namespace (Namensraum) dem Programm

VB.NET und Datenbanken, 25.01.10 Seite 4

Namespace importieren

Mit Hilfe von Imports wird ein Namespace (Namensraum) dem Programm bekannt gemacht.

Die Imports-Anweisung … steht immer Anfang des Programmcodes … steht außerhalb der Klassen-Definition.

Imports System.Data.OleDb

Page 5: VB.NET – Nutzung von ADO - luis.uni- · PDF fileVB.NET und Datenbanken, 25.01.10 Seite 4 Namespace importieren Mit Hilfe von Imports wird ein Namespace (Namensraum) dem Programm

VB.NET und Datenbanken, 25.01.10 Seite 5

Namespace

… gruppieren verschiedene Bibliothekselemente. … unterteilen große Mengen von Klassen in logische Gruppen. Einzelne Namen von Klassen etc. können in verschiedenen

Gruppen vorkommen. … sind hierarchisch gegliedert. Jede Ebene der Hierarchie wird

von der nächsten Ebene durch ein Punkt getrennt.

Imports System.Data.OleDb

Page 6: VB.NET – Nutzung von ADO - luis.uni- · PDF fileVB.NET und Datenbanken, 25.01.10 Seite 4 Namespace importieren Mit Hilfe von Imports wird ein Namespace (Namensraum) dem Programm

VB.NET und Datenbanken, 25.01.10 Seite 6

Beispiel

In diesem Beispiel wird die Gruppe System, die die Basisklassen für die Datentypen etc.

definiert. System.Data, die Klassen zum Arbeiten mit Daten

außerhalb des Projekts enthält. System.Data.OleDb bietet Klassen zum Arbeiten mit OLE-

Datenbanken. O(bject)L(inking)E(mbedding) bietet die Möglichkeit auf Datenquellen in Tabellenform zuzugreifen.

Imports System.Data.OleDb

Page 7: VB.NET – Nutzung von ADO - luis.uni- · PDF fileVB.NET und Datenbanken, 25.01.10 Seite 4 Namespace importieren Mit Hilfe von Imports wird ein Namespace (Namensraum) dem Programm

VB.NET und Datenbanken, 25.01.10 Seite 7

Objektvariablen

Dim dbConnect As New OleDbConnection()

Dim dbConnect As New System.Data.OleDb.OleDbConnection()

Mit Hilfe des Schlüsselwortes Dim wird eine Variable definiert. Der Name der Variablen ist frei wählbar. As weist der Variablen ein Objekttyp zu. New erstellt eine Instanz von einer Klasse. Eine Instanz

beschreibt das konkrete Objekt.

Page 8: VB.NET – Nutzung von ADO - luis.uni- · PDF fileVB.NET und Datenbanken, 25.01.10 Seite 4 Namespace importieren Mit Hilfe von Imports wird ein Namespace (Namensraum) dem Programm

VB.NET und Datenbanken, 25.01.10 Seite 8

Angabe des „Bauplans“

Dim dbConnect As New OleDbConnection()

Dim dbConnect As New System.Data.OleDb.OleDbConnection()

Jede Klasse, auf die ein Objekt beruht, ist in einem bestimmten Namensraum eindeutig definiert.

Der Namensraum kann … am Anfang des Programms mit Hilfe der Imports-

Anweisung eingebunden werden. … direkt angegeben werden.

Page 9: VB.NET – Nutzung von ADO - luis.uni- · PDF fileVB.NET und Datenbanken, 25.01.10 Seite 4 Namespace importieren Mit Hilfe von Imports wird ein Namespace (Namensraum) dem Programm

VB.NET und Datenbanken, 25.01.10 Seite 9

Mögliche „Baupläne“ für eine Datenverbindung

SQLConnection sind spezielle Klassen für Verbindungen zu Microsoft SQL Server 7.0 und höher.

OLEDBConnection stellen Verbindungen zu allen Quellen her, die mit einem Projekt verlinkt oder in ein Projekt eingebettet werden können.

Dim connect As New System.Data.OleDb.OleDbConnection()

Dim connect As New System.Data.SqlClient.OleDbConnection()

Page 10: VB.NET – Nutzung von ADO - luis.uni- · PDF fileVB.NET und Datenbanken, 25.01.10 Seite 4 Namespace importieren Mit Hilfe von Imports wird ein Namespace (Namensraum) dem Programm

VB.NET und Datenbanken, 25.01.10 Seite 10

Konstruktoren

Dim dbConnect As New OleDbConnection("Provider=Microsoft.ACE.OLEDB.12.0; Data Source=..\kundenAdresse.accdb")

… sind Prozeduren zum Initialisieren von Instanzen. … stellen für einen Bauplan die Randbedingungen zur

Verfügung. … werden mit Hilfe des Schlüsselwortes New aufgerufen. … bekommen eine Liste von Parametern in runden Klammern

übergeben. In diesem Beispiel wird eine Verbindungszeichenfolge übergeben.

Page 11: VB.NET – Nutzung von ADO - luis.uni- · PDF fileVB.NET und Datenbanken, 25.01.10 Seite 4 Namespace importieren Mit Hilfe von Imports wird ein Namespace (Namensraum) dem Programm

VB.NET und Datenbanken, 25.01.10 Seite 11

Verbindungszeichenfolge

Dim dbConnect As New OleDbConnection("Provider=Microsoft.ACE.OLEDB.12.0; Data Source=..\kundenAdresse.accdb")

… wird durch Anführungszeichen begrenzt. … besteht aus verschiedenen Attributen. Die Anzahl und Art der Attribute ist von dem gewählten

Verbindungstyp abhängig. Mit Hilfe des Gleichheitszeichen werden den Attributen in der

Zeichenfolge Werte zugewiesen.

Page 12: VB.NET – Nutzung von ADO - luis.uni- · PDF fileVB.NET und Datenbanken, 25.01.10 Seite 4 Namespace importieren Mit Hilfe von Imports wird ein Namespace (Namensraum) dem Programm

VB.NET und Datenbanken, 25.01.10 Seite 12

OLEDB-Verbindungszeichenfolge

Dim dbConnect As New OleDbConnection("Provider=Microsoft.ACE.OLEDB.12.0; Data Source=..\kundenAdresse.accdb")

Dem Attribut Data Source wird der Speicherort der Datenbank übergeben. Die Datenquelle kann eine beliebige Struktur sowie Speicherort besitzen.

Provider legt die Art der Datenquelle sowie deren Verbindung fest.

In diesem Beispiel wird eine Verbindung zu einer Access-Datenbank aufgebaut.

Page 13: VB.NET – Nutzung von ADO - luis.uni- · PDF fileVB.NET und Datenbanken, 25.01.10 Seite 4 Namespace importieren Mit Hilfe von Imports wird ein Namespace (Namensraum) dem Programm

VB.NET und Datenbanken, 25.01.10 Seite 13

Provider für relationale Datenbanken

Microsoft.ACE.OLEDB.12.0 kann zum Beispiel eine Verbindung zu einer Access 2007-Datenbank aufbauen.

Microsoft.Jet.OLEDB.4.0 kann zum Beispiel eine Verbindung zu einer Access 2003-Datenbank aufbauen.

Weitere Provider finden Sie unter http://www.carlprothman.net/Default.aspx?tabid=81

Page 14: VB.NET – Nutzung von ADO - luis.uni- · PDF fileVB.NET und Datenbanken, 25.01.10 Seite 4 Namespace importieren Mit Hilfe von Imports wird ein Namespace (Namensraum) dem Programm

VB.NET und Datenbanken, 25.01.10 Seite 14

Passwort und Benutzername

… können in den Attributen Password und User ID gespeichert werden.

… sollten aber nie fest in ein Connection-String geschrieben werden.

… sollten über ein Dialogfeld abgefragt werden. … für eine Datenbank entsprechen häufig der Windows-

Identifikation am Rechner.

Page 15: VB.NET – Nutzung von ADO - luis.uni- · PDF fileVB.NET und Datenbanken, 25.01.10 Seite 4 Namespace importieren Mit Hilfe von Imports wird ein Namespace (Namensraum) dem Programm

VB.NET und Datenbanken, 25.01.10 Seite 15

Verbindung öffnen und schließen

dbConnect.Open()dbConnect.Close()

Mit Hilfe der Methode .Open() wird eine Verbindung geöffnet. Eine geöffnete Verbindung kann nicht erneut geöffnet werden!

Mit Hilfe der Methode .Close() wird eine offene Verbindung geschlossen.

Die Eigenschaft .State hat folgende Attributwerte: ConnectionState.Open. Die Datenbank ist geöffnet. ConnectionState.Closed. Die Datenbank ist geschlossen.

Page 16: VB.NET – Nutzung von ADO - luis.uni- · PDF fileVB.NET und Datenbanken, 25.01.10 Seite 4 Namespace importieren Mit Hilfe von Imports wird ein Namespace (Namensraum) dem Programm

VB.NET und Datenbanken, 25.01.10 Seite 16

Fehler (Bugs)

Syntaxfehler entstehen beim Schreiben des Programmcodes. Logische Fehler treten auf, wenn der Entwickler ein Denkfehler

bei der Umsetzung der Aufgabe in ein Programm macht. Das Programm wird fehlerfrei ausgeführt, aber das Ergebnis ist nicht korrekt.

Laufzeitfehler treten während der Ausführung des Programms auf. Zum Beispiel eine CD, von der Daten gelesen werden sollen, befindet sich nicht im Laufwerk.

Page 17: VB.NET – Nutzung von ADO - luis.uni- · PDF fileVB.NET und Datenbanken, 25.01.10 Seite 4 Namespace importieren Mit Hilfe von Imports wird ein Namespace (Namensraum) dem Programm

VB.NET und Datenbanken, 25.01.10 Seite 17

Syntaxfehler

Die Syntax einer Programmiersprache ist die Gesamtheit der Regeln für die Bildung von Anweisungen aus Operatoren und Operanden sowie die Nutzung von Funktionen.

... verhindern die Kompilierung eines Programms. ... sind zum Beispiel:

Tippfehler bei der Eingabe von Variablennamen oder Schlüsselwörtern.

Mischung von numerischen und nicht-numerischen Operatoren.

Falsche Parameterübergabe an Funktionen. Syntaxfehler in Schleifen oder bedingten Anweisungen.

Page 18: VB.NET – Nutzung von ADO - luis.uni- · PDF fileVB.NET und Datenbanken, 25.01.10 Seite 4 Namespace importieren Mit Hilfe von Imports wird ein Namespace (Namensraum) dem Programm

VB.NET und Datenbanken, 25.01.10 Seite 18

… anzeigen

Im Codefenster werden Syntaxfehler durch eine farbige Schlange angezeigt.

Durch Überfahren des Fehlers mit der Maus wird … ein ToolTip, welches eine Fehlerbeschreibung anzeigt,

sowie … ein Ausrufezeichen im roten Kreuz, welches Hilfen zur

Fehlerkorrektor anbietet, eingeblendet.

Page 19: VB.NET – Nutzung von ADO - luis.uni- · PDF fileVB.NET und Datenbanken, 25.01.10 Seite 4 Namespace importieren Mit Hilfe von Imports wird ein Namespace (Namensraum) dem Programm

VB.NET und Datenbanken, 25.01.10 Seite 19

Fehlerliste

Ansicht – Fehlerliste blendet ein zusätzliches Fenster ein. Pro Zeile wird ein Fehler angezeigt. Die Zeile zeigt spaltenweise folgende Informationen an:

Was für ein Fehler ist aufgetreten? In welcher Datei? In welcher Zeile?

Page 20: VB.NET – Nutzung von ADO - luis.uni- · PDF fileVB.NET und Datenbanken, 25.01.10 Seite 4 Namespace importieren Mit Hilfe von Imports wird ein Namespace (Namensraum) dem Programm

VB.NET und Datenbanken, 25.01.10 Seite 20

… vermeiden

Öffnen Sie das Menü Extras – Optionen. Aktivieren Sie das Kontrollkästchen Alle Einstellungen anzeigen. Öffnen Sie den Ordner Projekte und Projektmappen und den

Unterordner VB-Standard. Stellen Sie für die Elemente Option Explicit und Option Strict den Wert On ein. Option Explicit erzwingt eine Variablendeklaration. Option Strict verhindert eine Datentyp-Konvertierung mit

Datenverlusten. Wechseln Sie in den Ordner Text-Editor – Basic –VB -

spezifisch. Aktivieren Sie das Kästchen Vorschläge für Fehlerkorrektur aktivieren.

Page 21: VB.NET – Nutzung von ADO - luis.uni- · PDF fileVB.NET und Datenbanken, 25.01.10 Seite 4 Namespace importieren Mit Hilfe von Imports wird ein Namespace (Namensraum) dem Programm

VB.NET und Datenbanken, 25.01.10 Seite 21

Laufzeitfehler

... sind Bugs, die nach dem Start eines Programms auftreten können.

... betreffen immer die Programmlogik. ... können Programme zu einem unerwünschten Verhalten oder

einen Programmabsturz zwingen. ... entstehen, wenn Ausdrücke oder Anweisungen von dem

Programm nicht korrekt ausgewertet werden. Beispiele:

Division durch Null. Überlauf (zu großer oder zu kleiner Wert für den

angegebenen Datentyp). Ein- und Ausgabefehler.

Page 22: VB.NET – Nutzung von ADO - luis.uni- · PDF fileVB.NET und Datenbanken, 25.01.10 Seite 4 Namespace importieren Mit Hilfe von Imports wird ein Namespace (Namensraum) dem Programm

VB.NET und Datenbanken, 25.01.10 Seite 22

Laufzeitfehler abfangen

Imports System.Data.OleDb... Dim dbConnect As New OleDbConnection("Provider=Microsoft.ACE.OLEDB.12.0; Data Source=..\kundenAdresse.accdb")

Try dbConnect.Open()Catch ex As Exception MessageBox.Show(ex.Message, "Fehler")Finally dbConnect.Close()End Try

Page 23: VB.NET – Nutzung von ADO - luis.uni- · PDF fileVB.NET und Datenbanken, 25.01.10 Seite 4 Namespace importieren Mit Hilfe von Imports wird ein Namespace (Namensraum) dem Programm

VB.NET und Datenbanken, 25.01.10 Seite 23

Arbeitsablauf: Keine Fehler vorhanden

Es werden alle Anweisungen, die dem Schlüsselwort Try folgen ausgeführt.

Wenn kein Fehler auftritt, wird in diesem Beispiel die Verbindung zur Datenquelle geöffnet.

Try dbConnect.Open()End Try

Page 24: VB.NET – Nutzung von ADO - luis.uni- · PDF fileVB.NET und Datenbanken, 25.01.10 Seite 4 Namespace importieren Mit Hilfe von Imports wird ein Namespace (Namensraum) dem Programm

VB.NET und Datenbanken, 25.01.10 Seite 24

Arbeitsablauf: Fehler vorhanden

Falls ein Fehler aufgetreten ist, wird eine Exception (Ausnahme) ausgelöst.

Die Exception wird mit Hilfe des Schlüsselwortes Catch abgefangen.

Try dbConnect.Open()Catch ex As Exception MessageBox.Show(ex.Message, "Fehler")End Try

Page 25: VB.NET – Nutzung von ADO - luis.uni- · PDF fileVB.NET und Datenbanken, 25.01.10 Seite 4 Namespace importieren Mit Hilfe von Imports wird ein Namespace (Namensraum) dem Programm

VB.NET und Datenbanken, 25.01.10 Seite 25

Welcher Fehler wird abgefangen?

Dem Schlüsselwort Catch folgt eine Definition einer Variablen vom Typ Exception (Ausname)

Diese Variable hat die Eigenschaft Message, die den Fehlertext enthält.

Mit Hilfe von MessageBox.Show kann dieser Fehlertext in einem Dialogfenster angezeigt werden.

Try dbConnect.Open()Catch ex As Exception MessageBox.Show(ex.Message, "Fehler")End Try

Page 26: VB.NET – Nutzung von ADO - luis.uni- · PDF fileVB.NET und Datenbanken, 25.01.10 Seite 4 Namespace importieren Mit Hilfe von Imports wird ein Namespace (Namensraum) dem Programm

VB.NET und Datenbanken, 25.01.10 Seite 26

Arbeitsablauf: Aufräumen

Alle Anweisungen, die dem Schlüsselwort Finally folgen, werden immer ausgeführt. Das heißt, die Verbindung wird in diesem Beispiel auch geschlossen, wenn ein Fehler aufgetreten ist.

Try dbConnect.Open()Catch ex As Exception MessageBox.Show(ex.Message, "Fehler")Finally dbConnect.Close()End Try

Page 27: VB.NET – Nutzung von ADO - luis.uni- · PDF fileVB.NET und Datenbanken, 25.01.10 Seite 4 Namespace importieren Mit Hilfe von Imports wird ein Namespace (Namensraum) dem Programm

VB.NET und Datenbanken, 25.01.10 Seite 27

SQL-Anweisungen im Code

Dim sqlText As String = ""Dim dbConnect As New OleDbConnection("Provider=Microsoft.ACE.OLEDB.12.0;Data Source=..\datenbank\kundenAdresse.accdb")Dim dbCommand As OleDbCommandDim dbReader As OleDbDataReader

sqlText = "SELECT Firma, Anrede, Ansprechpartner, Strasse, PLZ, Ort FROM tblKunde;"Try dbConnect.Open() dbCommand = New OleDbCommand(sqlText, dbConnect)End Try

Page 28: VB.NET – Nutzung von ADO - luis.uni- · PDF fileVB.NET und Datenbanken, 25.01.10 Seite 4 Namespace importieren Mit Hilfe von Imports wird ein Namespace (Namensraum) dem Programm

VB.NET und Datenbanken, 25.01.10 Seite 28

Arbeitsablauf

Zuerst wird eine Verbindung zu einer Datenbank erstellt. Es wird eine Variable vom Typ OleDBConnection oder

SqlConnection benötigt. Mit Hilfe der Methode Open wird die Verbindung geöffnet.

An diese geöffnete Verbindung wird eine SQL-Anweisung gesendet. Es wird ein Command-Objekt deklariert. Diesem Objekt wird eine SQL-Anweisung und die Art der

Verbindung übergeben.

Page 29: VB.NET – Nutzung von ADO - luis.uni- · PDF fileVB.NET und Datenbanken, 25.01.10 Seite 4 Namespace importieren Mit Hilfe von Imports wird ein Namespace (Namensraum) dem Programm

VB.NET und Datenbanken, 25.01.10 Seite 29

Command-Objekt

… wird benötigt, um Daten aus einer Datenbank auszulesen oder zu verändern.

… stellt eine SQL-Anweisung dar. … benötigt eine offene Verbindung zu einer Datenbank. Jede

offene Verbindung kann zu einer bestimmten Zeit nur genau ein Command-Objekt verarbeiten.

Page 30: VB.NET – Nutzung von ADO - luis.uni- · PDF fileVB.NET und Datenbanken, 25.01.10 Seite 4 Namespace importieren Mit Hilfe von Imports wird ein Namespace (Namensraum) dem Programm

VB.NET und Datenbanken, 25.01.10 Seite 30

Arbeitsablauf

Das Command-Objekt wird deklariert. Im nächsten Schritt wird das Command-Objekt mit einer Sql-

Anweisung initialisiert. Die Anweisung wird mit Hilfe der angegebenen, geöffneten

Verbindung ausgeführt. Das Command-Objekt kann ein Ergebnis zurückliefern. Über die Verbindung wird das Ergebnis der SQL-Anweisung

zurückgeliefert. Dieses Ergebnis kann als Datenquelle in einem Projekt genutzt werden.

Page 31: VB.NET – Nutzung von ADO - luis.uni- · PDF fileVB.NET und Datenbanken, 25.01.10 Seite 4 Namespace importieren Mit Hilfe von Imports wird ein Namespace (Namensraum) dem Programm

VB.NET und Datenbanken, 25.01.10 Seite 31

Variable für ein Command-Objekt deklarieren

Eine Variable vom Typ des Command-Objekts wird deklariert. Die Variable wird mit Nothing (Nichts) initialisiert. Sie verweist

auf kein Objekt.

Dim dbCommand As OleDbCommand = Nothing

Page 32: VB.NET – Nutzung von ADO - luis.uni- · PDF fileVB.NET und Datenbanken, 25.01.10 Seite 4 Namespace importieren Mit Hilfe von Imports wird ein Namespace (Namensraum) dem Programm

VB.NET und Datenbanken, 25.01.10 Seite 32

Command-Objekt initialisieren

Ein Objekt wird mit New erstellt. In diesem Beispiel wird ein Objekt OleDbCommand neu erstellt. In runden Klammern wird dem Objekt als Startwert

… die auszuführende SQL-Anweisung sowie … die Verbindung zu der Datenbank übergeben.

Dim dbCommand As OleDbCommand = Nothing

sqlText = "SELECT Firma, Anrede, Ansprechpartner, Strasse, PLZ, Ort FROM tblKunde;"dbCommand = New OleDbCommand(sqlText, dbConnect)

Page 33: VB.NET – Nutzung von ADO - luis.uni- · PDF fileVB.NET und Datenbanken, 25.01.10 Seite 4 Namespace importieren Mit Hilfe von Imports wird ein Namespace (Namensraum) dem Programm

VB.NET und Datenbanken, 25.01.10 Seite 33

Geänderte Datensätze in einem DataSet

Dim dataRow As DataRowDim dataTable As DataTabledataTable = Me.KundenAdresseDataSet.Tables("tblKunde").GetChanges

For Each dataRow In dataTable.Rows sqlText = "UPDATE tblKunde SET" … sqlText = sqlText & ", PLZ = '" & dataRow.Item(5).ToString & "'" sqlText = sqlText & " WHERE IDKunde = " & dataRow.Item(0).ToStringNext dataRow

Page 34: VB.NET – Nutzung von ADO - luis.uni- · PDF fileVB.NET und Datenbanken, 25.01.10 Seite 4 Namespace importieren Mit Hilfe von Imports wird ein Namespace (Namensraum) dem Programm

VB.NET und Datenbanken, 25.01.10 Seite 34

Auflistung der geänderten Datensätze

Me beschreibt die Form, an der der Code hängt. Diese Form kann auf ein DataSet zugreifen. Jedes DateSet eine Auflistung von Tabellen (Tables).

Auflistungen enden immer mit einem „s“. Jede Tabelle hat eine Auflistung der geänderten Datensätze

(GetChanges).

Dim dataTable As DataTable

dataTable = Me.KundenAdresseDataSet.Tables("tblKunde").GetChanges

Page 35: VB.NET – Nutzung von ADO - luis.uni- · PDF fileVB.NET und Datenbanken, 25.01.10 Seite 4 Namespace importieren Mit Hilfe von Imports wird ein Namespace (Namensraum) dem Programm

VB.NET und Datenbanken, 25.01.10 Seite 35

Auflistung (Collection)

... ist ein Behältniss für eine Sammlung von Objekten mit bestimmten Eigenschaften.

... ist ein dynamisches Felder von einer bestimmten Objektart. ... ist eine Liste aller Elemente einer Objektart. Die Bezeichnung einer Auflistung endet immer mit s. ... hat genauso wie Objekte Eigenschaften und Methoden. Zum

Beispiel die Eigenschaft Count gibt die Anzahl der Elemente in einer Auflistung zurück.

Page 36: VB.NET – Nutzung von ADO - luis.uni- · PDF fileVB.NET und Datenbanken, 25.01.10 Seite 4 Namespace importieren Mit Hilfe von Imports wird ein Namespace (Namensraum) dem Programm

VB.NET und Datenbanken, 25.01.10 Seite 36

Zellen in einer Zeile

Jede Datentabelle hat eine Auflistung der Zeilen / Datensätze (Rows).

Jede Zeile hat Elemente (Item), die die Zellen bezeichnen. Eine Zelle wird mit Hilfe eines Indizes bestimmt. Die erste Zelle

hat den Index 0. In diesem Beispiel wird der Inhalt der sechsten Zelle in der

angegebenen Zeile in ein String konvertiert.

For Each dataRow In dataTable.Rows … sqlText = sqlText & ", PLZ = '" & dataRow.Item(5).ToString & "'"Next dataRow

Page 37: VB.NET – Nutzung von ADO - luis.uni- · PDF fileVB.NET und Datenbanken, 25.01.10 Seite 4 Namespace importieren Mit Hilfe von Imports wird ein Namespace (Namensraum) dem Programm

VB.NET und Datenbanken, 25.01.10 Seite 37

Index von Feldern (Arrays)

... sind nullbasiert. Das erste Element in der Auflistung hat den Index null. Der Index der Elemente einer Auflistung verändert sich in

Abhängigkeit der Anzahl der Elemente. Der Index ist nicht an ein bestimmtes Element gekoppelt.

Page 38: VB.NET – Nutzung von ADO - luis.uni- · PDF fileVB.NET und Datenbanken, 25.01.10 Seite 4 Namespace importieren Mit Hilfe von Imports wird ein Namespace (Namensraum) dem Programm

VB.NET und Datenbanken, 25.01.10 Seite 38

Zellen in einer Zeile

Eine Auflistung kann mit Hilfe der For Each-Schleife durchlaufen werden.

Dem Schlüsselwort For Each folgt eine Variable, die ein Element in der Auflistung symbolisiert.

Dem Schlüsselwort In folgt der Name der Auflistung. In diesem Beispiel werden die Zeilen einer Tabelle durchlaufen.

Next springt zu dem nächsten Element. In diesem Beispiel die nächste Zeile in der Auflistung.

For Each dataRow In dataTable.Rows …Next dataRow

Page 39: VB.NET – Nutzung von ADO - luis.uni- · PDF fileVB.NET und Datenbanken, 25.01.10 Seite 4 Namespace importieren Mit Hilfe von Imports wird ein Namespace (Namensraum) dem Programm

VB.NET und Datenbanken, 25.01.10 Seite 39

Datensätze in der Datenbank ändern

Dim sqlText As String = "UPDATE ..."Dim dbConnect As New OleDbConnection("Provider=Microsoft.ACE.OLEDB.12.0;Data Source=..\datenbank\kundenAdresse.accdb")Dim dbCommand As New OleDbCommand

dbConnect.Open()dbCommand.Connection = dbConnectdbCommand.CommandText = sqlTextdbCommand.ExecuteNonQuery()

dbConnect.Close()

Page 40: VB.NET – Nutzung von ADO - luis.uni- · PDF fileVB.NET und Datenbanken, 25.01.10 Seite 4 Namespace importieren Mit Hilfe von Imports wird ein Namespace (Namensraum) dem Programm

VB.NET und Datenbanken, 25.01.10 Seite 40

SQL-Anweisung UPDATE

Die Aktualisierungsabfrage wird mit UPDATE eingeleitet. Im Anschluss daran wird die Tabelle aufgeführt, deren Daten

geändert werden sollen. Es können immer nur die Daten in einer Tabelle geändert werden.

Dem Befehl SET folgt die Berechnung der neuen Daten. Die Anzahl der zu ändernden Datensätze kann mit WHERE

eingeschränkt werden.

sqlText = "UPDATE tblKunde SET" …sqlText = sqlText & ", PLZ = '" & dataRow.Item(5).ToString & "'"sqlText = sqlText & " WHERE IDKunde = " & dataRow.Item(0).ToString

Page 41: VB.NET – Nutzung von ADO - luis.uni- · PDF fileVB.NET und Datenbanken, 25.01.10 Seite 4 Namespace importieren Mit Hilfe von Imports wird ein Namespace (Namensraum) dem Programm

VB.NET und Datenbanken, 25.01.10 Seite 41

Eigenschaften des Command-Objekts

Die Eigenschaft Connection beschreibt immer die Verbindung zu der Datenbank eines Command-Objekts.

CommandText enthält die auszuführende SQL-Anweisung.

dbCommand.Connection = dbConnectdbCommand.CommandText = sqlText

Page 42: VB.NET – Nutzung von ADO - luis.uni- · PDF fileVB.NET und Datenbanken, 25.01.10 Seite 4 Namespace importieren Mit Hilfe von Imports wird ein Namespace (Namensraum) dem Programm

VB.NET und Datenbanken, 25.01.10 Seite 42

SQL-Anweisung ausführen

Die Methode ,ExecuteNonQuery() gibt keine Daten zurück. Es wird nur eine SQL-Anweisung zur Datenbank gefeuert. Als Rückgabewert werden die Anzahl der geänderten

Datensätze zurückgeliefert. Der Rückgabewert muss nicht ausgewertet werden.

… wird häufig für UPDATE, INSERT oder DELETE genutzt.

dbCommand.ExecuteNonQuery()

Page 43: VB.NET – Nutzung von ADO - luis.uni- · PDF fileVB.NET und Datenbanken, 25.01.10 Seite 4 Namespace importieren Mit Hilfe von Imports wird ein Namespace (Namensraum) dem Programm

VB.NET und Datenbanken, 25.01.10 Seite 43

Neue Datensätze in der Datenbank einfügen

Dim sqlText As String = ""Dim dbConnect As New OleDbConnection("Provider=Microsoft.ACE.OLEDB.12.0;Data Source=..\datenbank\kundenAdresse.accdb")Dim dbCommand As OleDbCommand

sqlText = "INSERT INTO tblKunde (Firma)"sqlText = sqlText & " VALUES ("sqlText = sqlText & "'" & txtFirma.Text & ")"dbConnect.Open()dbCommand = New OleDbCommand(sqlText, dbConnect)dbCommand.ExecuteNonQuery()

Page 44: VB.NET – Nutzung von ADO - luis.uni- · PDF fileVB.NET und Datenbanken, 25.01.10 Seite 4 Namespace importieren Mit Hilfe von Imports wird ein Namespace (Namensraum) dem Programm

VB.NET und Datenbanken, 25.01.10 Seite 44

SQL-Anweisung INSERT INTO

INSERT INTO autor ( vorname, nachname )SELECT newautor.vorname, newautor.nachname FROM newautor

sqlText = "INSERT INTO tblKunde (Firma)"sqlText = sqlText & " VALUES ("sqlText = sqlText & "'" & txtFirma.Text & ")"

Page 45: VB.NET – Nutzung von ADO - luis.uni- · PDF fileVB.NET und Datenbanken, 25.01.10 Seite 4 Namespace importieren Mit Hilfe von Imports wird ein Namespace (Namensraum) dem Programm

VB.NET und Datenbanken, 25.01.10 Seite 45

Wo werden die Daten eingefügt?

Eine Anfüge-Abfrage beginnt mit INSERT INTO. Dem SQL-Befehl folgt ein Tabellenname. In diese Tabelle

werden die Daten eingefügt. In den runden Klammern folgt der Tabelle eine Liste von

Feldern. In diese Felder werden die Daten von links beginnend eingefügt.

INSERT INTO autor ( vorname, nachname ) ...

Page 46: VB.NET – Nutzung von ADO - luis.uni- · PDF fileVB.NET und Datenbanken, 25.01.10 Seite 4 Namespace importieren Mit Hilfe von Imports wird ein Namespace (Namensraum) dem Programm

VB.NET und Datenbanken, 25.01.10 Seite 46

Welche Daten werden eingefügt?

Die anzufügenden Daten werden mit Hilfe … einer SELECT-Anweisung ausgewählt. … einer Wertliste (VALUES) bestimmt.

Die neuen Werte werden den Feldern in der Zieltabelle immer von links nach rechts zugeordnet.

INSERT INTO autor ( vorname, nachname ) SELECT newautor.vorname, newautor.nachname FROM newautorINSERT INTO autor ( vorname, nachname ) VALUES ("Tim", "Regen")

Page 47: VB.NET – Nutzung von ADO - luis.uni- · PDF fileVB.NET und Datenbanken, 25.01.10 Seite 4 Namespace importieren Mit Hilfe von Imports wird ein Namespace (Namensraum) dem Programm

VB.NET und Datenbanken, 25.01.10 Seite 47

Selektierte Datensätze in einem DataGridView...

Dim selectedRow As DataGridViewRowDim lstIDKunde As StringlstIDKunde = ""

For Each selectedRow In Me.ShowKundeAdresse.SelectedRows If lstIDKunde <> "" Then lstIDKunde = lstIDKunde & ", " End If

lstIDKunde = selectedRow.Cells.Item(0).Value.ToString Me.ShowKundeAdresse.Rows.Remove(selectedRow)Next selectedRow

Page 48: VB.NET – Nutzung von ADO - luis.uni- · PDF fileVB.NET und Datenbanken, 25.01.10 Seite 4 Namespace importieren Mit Hilfe von Imports wird ein Namespace (Namensraum) dem Programm

VB.NET und Datenbanken, 25.01.10 Seite 48

Selektierte Datensätze

… werden in der Auflistung SelectedRows gesammelt. … sind vom Datentyp DataGridViewRow und nicht DataRow.

Dim selectedRow As DataGridViewRowFor Each selectedRow In Me.ShowKundeAdresse.SelectedRows

Page 49: VB.NET – Nutzung von ADO - luis.uni- · PDF fileVB.NET und Datenbanken, 25.01.10 Seite 4 Namespace importieren Mit Hilfe von Imports wird ein Namespace (Namensraum) dem Programm

VB.NET und Datenbanken, 25.01.10 Seite 49

Werte einer Zelle in einer selektierten Zeile

Die Auflistung Cells enthält alle Zellen einer Zeile. Item(0) verweist auf die erste Zelle in der angegebenen Zeile.

Innerhalb der runden Klammern wird ein Index angegeben. Der Index beginnt mit 0.

Die Eigenschaft Value enthält den Wert der Zelle.

lstIDKunde = selectedRow.Cells.Item(0).Value.ToString

Page 50: VB.NET – Nutzung von ADO - luis.uni- · PDF fileVB.NET und Datenbanken, 25.01.10 Seite 4 Namespace importieren Mit Hilfe von Imports wird ein Namespace (Namensraum) dem Programm

VB.NET und Datenbanken, 25.01.10 Seite 50

Selektierte Datensätze löschen

Die Methode .Remove() wird ein Verweis auf eine bestimmte Zeile in runden Klammern übergeben.

In diesem Beispiel wird die ausgewählte Zeile übergeben und anschließend gelöscht.

Me.ShowKundeAdresse.Rows.Remove(selectedRow)

Page 51: VB.NET – Nutzung von ADO - luis.uni- · PDF fileVB.NET und Datenbanken, 25.01.10 Seite 4 Namespace importieren Mit Hilfe von Imports wird ein Namespace (Namensraum) dem Programm

VB.NET und Datenbanken, 25.01.10 Seite 51

Datensätze in einer Datenbank löschen

Dim sqlText As String = ""Dim dbConnect As New OleDbConnection("Provider=Microsoft.ACE.OLEDB.12.0;Data Source=..\datenbank\kundenAdresse.accdb")Dim dbCommand As OleDbCommand

sqlText = "DELETE FROM tblKunde “sqlText = sqlText & “WHERE IDKUNDE IN(" & lstIDKunde & ")"

dbConnect.Open()dbCommand = New OleDbCommand(sqlText, dbConnect)dbCommand.ExecuteNonQuery()

Page 52: VB.NET – Nutzung von ADO - luis.uni- · PDF fileVB.NET und Datenbanken, 25.01.10 Seite 4 Namespace importieren Mit Hilfe von Imports wird ein Namespace (Namensraum) dem Programm

VB.NET und Datenbanken, 25.01.10 Seite 52

SQL-Anweisung DELETE

Das Schlüsselwort DELETE leitet eine Löschabfrage ein. Eine Löschabfrage wird immer über eine Tabelle gestellt. FROM tblKunde gibt Auskunft darüber, in welcher Tabelle die

Datensätze gelöscht werden sollen. Mit Hilfe von WHERE wird eine Bedingung zur Auswahl der

Datensätze angegeben. Die Anzahl der zu löschenden Datensätze wird eingeschränkt.

sqlText = "DELETE FROM tblKunde “sqlText = sqlText & “WHERE IDKUNDE IN(" & lstIDKunde & ")"

Page 53: VB.NET – Nutzung von ADO - luis.uni- · PDF fileVB.NET und Datenbanken, 25.01.10 Seite 4 Namespace importieren Mit Hilfe von Imports wird ein Namespace (Namensraum) dem Programm

VB.NET und Datenbanken, 25.01.10 Seite 53

Cursor auf die Daten erzeugen

Dim sqlText As String = ""Dim dbConnect As New OleDbConnection("Provider=Microsoft.ACE.OLEDB.12.0;Data Source=..\datenbank\kundenAdresse.accdb")Dim dbCommand As OleDbCommandDim dbReader As OleDbDataReader

sqlText = "SELECT Firma, Anrede, Ansprechpartner, Strasse, PLZ, Ort FROM tblKunde;"Try dbConnect.Open() dbCommand = New OleDbCommand(sqlText, dbConnect) dbReader = dbCommand.ExecuteReader() End Try

Page 54: VB.NET – Nutzung von ADO - luis.uni- · PDF fileVB.NET und Datenbanken, 25.01.10 Seite 4 Namespace importieren Mit Hilfe von Imports wird ein Namespace (Namensraum) dem Programm

VB.NET und Datenbanken, 25.01.10 Seite 54

Erläuterung

Eine Variable vom Typ des DataReaders-Objekts wird deklariert.

Der DataReader wird über die Methode .ExecuteReader() erzeugt. Der DataReader ist ein Cursor auf die zu lesenden Daten. Die zu lesende Daten sind mit Hilfe des Command-Objekts

festgelegt.

Dim dbReader As OleDbDataReader

dbReader = dbCommand.ExecuteReader()

Page 55: VB.NET – Nutzung von ADO - luis.uni- · PDF fileVB.NET und Datenbanken, 25.01.10 Seite 4 Namespace importieren Mit Hilfe von Imports wird ein Namespace (Namensraum) dem Programm

VB.NET und Datenbanken, 25.01.10 Seite 55

DataReader

… ist ein Cursor auf Daten in einer Datenquelle. … kann nur lesend auf die Daten zugreifen. … ist ein vorwärtsgerichteter Cursor. … kann nur Seite für Seite umblättern, aber nicht

zurückblättern. … benötigt eine geöffnete Verbindung.

Page 56: VB.NET – Nutzung von ADO - luis.uni- · PDF fileVB.NET und Datenbanken, 25.01.10 Seite 4 Namespace importieren Mit Hilfe von Imports wird ein Namespace (Namensraum) dem Programm

VB.NET und Datenbanken, 25.01.10 Seite 56

Grafische Darstellung

Datenquelle

Connection

Command

DataReader

Page 57: VB.NET – Nutzung von ADO - luis.uni- · PDF fileVB.NET und Datenbanken, 25.01.10 Seite 4 Namespace importieren Mit Hilfe von Imports wird ein Namespace (Namensraum) dem Programm

VB.NET und Datenbanken, 25.01.10 Seite 57

Arbeitsablauf

Eine Verbindung wird geöffnet. Ein Command-Objekt wird erzeugt. Das Command wird mit Hilfe der ExecuteReader-Methode

ausgeführt. Ein DataReader wird durch die Methode erzeugt. Das Ergebnis wird in einer temporären Tabelle in einer

Datenbank gespeichert. Der DataReader setzt ein Lese-Cursor vor den ersten

Datensatz. Es werden die Spalteninhalte bereitgestellt. Das VB-Programm liest die Daten und speichert diese in einem

lokalen Speicher oder verarbeitet die Daten direkt.

Page 58: VB.NET – Nutzung von ADO - luis.uni- · PDF fileVB.NET und Datenbanken, 25.01.10 Seite 4 Namespace importieren Mit Hilfe von Imports wird ein Namespace (Namensraum) dem Programm

VB.NET und Datenbanken, 25.01.10 Seite 58

Daten aus der Datenquelle lesen

Try dbReader = dbCommand.ExecuteReader() Do While dbReader.Read() If strAusgabe = "" Then strAusgabe = dbReader("Firma").ToString Else strAusgabe = strAusgabe & ControlChars.NewLine & dbReader.GetString(0) End If LoopEnd Try

Page 59: VB.NET – Nutzung von ADO - luis.uni- · PDF fileVB.NET und Datenbanken, 25.01.10 Seite 4 Namespace importieren Mit Hilfe von Imports wird ein Namespace (Namensraum) dem Programm

VB.NET und Datenbanken, 25.01.10 Seite 59

Erläuterung

Mit Hilfe der Methode .Read() … liest der Cursor jeweils ein Datensatz (eine Zeile) ein. … wird der Cursor auf den nächsten Datensatz gesetzt.

Wenn das Ende (EOF) der Tabelle erreicht ist, wird der Wert False zurückgeliefert.

Dim dbReader As OleDbDataReaderdbReader = dbCommand.ExecuteReader() Do While dbReader.Read() ...Loop

Page 60: VB.NET – Nutzung von ADO - luis.uni- · PDF fileVB.NET und Datenbanken, 25.01.10 Seite 4 Namespace importieren Mit Hilfe von Imports wird ein Namespace (Namensraum) dem Programm

VB.NET und Datenbanken, 25.01.10 Seite 60

Anweisungen wiederholen

Do While – Loop ist eine Schleife. Die Schleife wiederholt die Anweisungen zwischen Do While und

Loop beliebig oft. Die Schleife wird in Abhängigkeit einer Bedingung durchlaufen.

Die Bedingung folgt dem Schlüsselwort Do While. Eine Do While - Loop-Schleife läuft solange wie die Bedingung

erfüllt ist. Sobald die Bedingung nicht erfüllt ist, wird die Schleife abgebrochen.

Do While dbReader.Read() ...Loop

Page 61: VB.NET – Nutzung von ADO - luis.uni- · PDF fileVB.NET und Datenbanken, 25.01.10 Seite 4 Namespace importieren Mit Hilfe von Imports wird ein Namespace (Namensraum) dem Programm

VB.NET und Datenbanken, 25.01.10 Seite 61

Untypisierte Daten aus den Spalten lesen

dbReader("Firma").ToString … liest die Daten aus der Spalte „Firma“. … haben keinen definierten Datentyp. NULL-Werte des Feldes verursachen keinen Fehler.

Die Daten werden mit Hilfe der Methode .ToString in eine Zeichenkette umgewandelt werden.

strAusgabe = dbReader("Firma").ToString

Page 62: VB.NET – Nutzung von ADO - luis.uni- · PDF fileVB.NET und Datenbanken, 25.01.10 Seite 4 Namespace importieren Mit Hilfe von Imports wird ein Namespace (Namensraum) dem Programm

VB.NET und Datenbanken, 25.01.10 Seite 62

Weitere Möglichkeit

dbReader.Item(0) oder dbReader.Item("Firma") liest eine Spalte ohne Konvertierung aus der Quelle aus. Der Spalteninhalt hat den gleichen Datentyp für die Quelle sowie auch im Programm. NULL-Werte der Felder werden ausgelesen.

In diesem Beispiel wird der Inhalt anschließend in einem String konvertiert.

Die Spalte wird mit Hilfe eines Indizies bestimmt. Als Index kann eine Ganzzahl oder der Feldname der Spalte genutzt werden.

strAusgabe = dbReader("Firma").ToString

strAusgabe = dbReader.Item("Firma").ToString

Page 63: VB.NET – Nutzung von ADO - luis.uni- · PDF fileVB.NET und Datenbanken, 25.01.10 Seite 4 Namespace importieren Mit Hilfe von Imports wird ein Namespace (Namensraum) dem Programm

VB.NET und Datenbanken, 25.01.10 Seite 63

Ganzzahl oder Spaltenname als Index?

Der Zugriff mit Hilfe einer Ganzzahl ist schneller. Aber: Die Ganzzahl ist nicht an eine Spalte gebunden. Zum

Beispiel bezeichnet die Ganzzahl 2 die Spalte „Strasse“. Vor dieser Spalte wird eine neue Spalte „Unternehmensform“ eingefügt. Die Ganzzahl 2 bezeichnet jetzt die Spalte „Unternehmensform“ und nicht mehr die Spalte „Strasse“.

Spaltennamen sind für den Programmierer besser lesbar.

Page 64: VB.NET – Nutzung von ADO - luis.uni- · PDF fileVB.NET und Datenbanken, 25.01.10 Seite 4 Namespace importieren Mit Hilfe von Imports wird ein Namespace (Namensraum) dem Programm

VB.NET und Datenbanken, 25.01.10 Seite 64

Typisierte Daten aus den Spalten lesen

dbReader.GetString(0) … liest eine Spalte vom Datentyp „String“ aus. Null-Werte erzeugen einen Fehler. Get...() gibt es für jeden Datentyp einer Datenbank. Die zu lesende Spalte wird mit Hilfe ihres Indizes

angesprochen. Die erste Spalte hat den Index 0. Mit Hilfe der Methode .GetOrdinal("Firma") kann der Index einer Spalte ermittelt werden.

strAusgabe = dbReader("Firma").ToString

strAusgabe = dbReader.Item("Firma").ToString

strAusgabe = strAusgabe & ControlChars.NewLine & dbReader.GetString(0)

Page 65: VB.NET – Nutzung von ADO - luis.uni- · PDF fileVB.NET und Datenbanken, 25.01.10 Seite 4 Namespace importieren Mit Hilfe von Imports wird ein Namespace (Namensraum) dem Programm

VB.NET und Datenbanken, 25.01.10 Seite 65

Texte verknüpfen

Mit Hilfe des kaufmännischen Unds werden verschiedene Texte aneinandergereiht.

ControlChars definiert Sonderzeichen wie eine neue Zeile (ControlChars.NewLine), Tabulator etc.

strAusgabe = dbReader("Firma").ToString

strAusgabe = strAusgabe & ControlChars.NewLine & dbReader.GetString(0)

Page 66: VB.NET – Nutzung von ADO - luis.uni- · PDF fileVB.NET und Datenbanken, 25.01.10 Seite 4 Namespace importieren Mit Hilfe von Imports wird ein Namespace (Namensraum) dem Programm

VB.NET und Datenbanken, 25.01.10 Seite 66

Sind Datensätze vorhanden?

Try ... dbReader = dbCommand.ExecuteReader()

If dbReader.HasRows Then Do While dbReader.Read() ... LoopEnd Try

Mit Hilfe der Methode .HasRows kann abgefragt werden, ob Datensätze vorhanden sind oder nicht.

Page 67: VB.NET – Nutzung von ADO - luis.uni- · PDF fileVB.NET und Datenbanken, 25.01.10 Seite 4 Namespace importieren Mit Hilfe von Imports wird ein Namespace (Namensraum) dem Programm

VB.NET und Datenbanken, 25.01.10 Seite 67

DataReader schließen

Der Cursor wird nach dem Lesen aller Datensätze geschlossen.

Eine geöffneter DataReader blockiert die Verbindung. Die genutzte Verbindung kann nicht von anderen Command-Objekten verwendet werden.

dbReader.Close()

Page 68: VB.NET – Nutzung von ADO - luis.uni- · PDF fileVB.NET und Datenbanken, 25.01.10 Seite 4 Namespace importieren Mit Hilfe von Imports wird ein Namespace (Namensraum) dem Programm

VB.NET und Datenbanken, 25.01.10 Seite 68

DataAdapter

… füllt immer Tabellen in Abhängigkeit einer SELECT-Anweisung.

… sollte für jede benötigte Tabelle angelegt werden, muss aber nicht.

Daten werden von einer Datenbank in eine Tabelle geladen. Datenänderungen werden zurücgespeichert.

Page 69: VB.NET – Nutzung von ADO - luis.uni- · PDF fileVB.NET und Datenbanken, 25.01.10 Seite 4 Namespace importieren Mit Hilfe von Imports wird ein Namespace (Namensraum) dem Programm

VB.NET und Datenbanken, 25.01.10 Seite 69

Grafische DarstellungLokale Datenspeicher

Dataset

Tabelle 1 Tabelle 2 Tabelle 1

Datenbank

Datenadapter

Page 70: VB.NET – Nutzung von ADO - luis.uni- · PDF fileVB.NET und Datenbanken, 25.01.10 Seite 4 Namespace importieren Mit Hilfe von Imports wird ein Namespace (Namensraum) dem Programm

VB.NET und Datenbanken, 25.01.10 Seite 70

Voraussetzung für die Nutzung

Eine Verbindung (Connection-Objekt) existiert. Die Verbindung muss aber nicht geöffnet sein.

Ein DataSet-Objekt oder ein DataTable-Objekt ist vorhanden. Eine SQL-Anweisung muss erstellt werden. Ein DataAdapter muss erzeugt werden.

Page 71: VB.NET – Nutzung von ADO - luis.uni- · PDF fileVB.NET und Datenbanken, 25.01.10 Seite 4 Namespace importieren Mit Hilfe von Imports wird ein Namespace (Namensraum) dem Programm

VB.NET und Datenbanken, 25.01.10 Seite 71

Daten lesen

Eine geschlossene Verbindung zu einer Datenquelle wird automatisch vom DataAdapter geöffnet.

Anschließend wird die SELECT-Anweisung vom DataAdapter ausgeführt.

Die Ergebnismenge der Anweisung wird erzeugt. Der DataAdapter nutzt ein DataReader-Objekt, um die

Ergebnismenge auszulesen. Der DataAdapter schreibt die gelesenen Daten in das DataSet

oder DataTable.

Page 72: VB.NET – Nutzung von ADO - luis.uni- · PDF fileVB.NET und Datenbanken, 25.01.10 Seite 4 Namespace importieren Mit Hilfe von Imports wird ein Namespace (Namensraum) dem Programm

VB.NET und Datenbanken, 25.01.10 Seite 72

DataAdapter erzeugen

Dim daKunde As OleDbDataAdapter

sqlText = "SELECT * FROM tblKunde"

dbConnect.Open()daKunde = New OleDbDataAdapter(sqlText, dbConnect)

Dem Konstruktor wird … eine SQL-Anweisung zur Auswahl der Daten übergeben. … eine offene Verbindung übergeben.

Page 73: VB.NET – Nutzung von ADO - luis.uni- · PDF fileVB.NET und Datenbanken, 25.01.10 Seite 4 Namespace importieren Mit Hilfe von Imports wird ein Namespace (Namensraum) dem Programm

VB.NET und Datenbanken, 25.01.10 Seite 73

UpdateCommand

sqlText = "UPDATE tblKunde SET Firma = ?, Anrede = ?, Ansprechpartner = ?, "sqlText = sqlText & "Straße = ?, PLZ = ?, Ort = ? WHERE IDKunde = ?"

dataAdapter.UpdateCommand = New OleDbCommand(sqlText, dbConnect)

… speichert Änderungen in der Datenquelle. Die Fragezeichen in der UPDATE-Anweisung werden durch die

entsprechenden Parameter ersetzt.

Page 74: VB.NET – Nutzung von ADO - luis.uni- · PDF fileVB.NET und Datenbanken, 25.01.10 Seite 4 Namespace importieren Mit Hilfe von Imports wird ein Namespace (Namensraum) dem Programm

VB.NET und Datenbanken, 25.01.10 Seite 74

Parameter zum UpdateCommand

Dim parameter As OleDbParameterWith dataAdapter.UpdateCommand.Parameters .Add("Firma", OleDbType.VarChar, 255, "Firma") .Add("Anrede", OleDbType.VarChar, 10, "Anrede") .Add("Ansprechpartner", OleDbType.VarChar, 255, "Ansprechpartner") .Add("Straße", OleDbType.VarChar, 255, "Straße") .Add("PLZ", OleDbType.VarChar, 5, "PLZ") .Add("Ort", OleDbType.VarChar, 255, "Ort")

parameter = New OleDbParameter("IDKundeOld", OleDbType.UnsignedBigInt, 30000, "IDKunde") parameter.SourceVersion = DataRowVersion.Original .Add(parameter)End With

Page 75: VB.NET – Nutzung von ADO - luis.uni- · PDF fileVB.NET und Datenbanken, 25.01.10 Seite 4 Namespace importieren Mit Hilfe von Imports wird ein Namespace (Namensraum) dem Programm

VB.NET und Datenbanken, 25.01.10 Seite 75

Erläuterung: Add-Methode

In der Auflistung Parameters werden alle Parameter der Sql-Anweisung gesammelt.

Mit Hilfe der Methode .Add() werden Parameter angefügt, die die aktuell, geänderten Werte der entsprechenden Spalten symbolisieren.

Der Methode .Add() wird der Name des Parameters, der Datentyp, die Größe und der Name der dazugehörigen Spalte übergeben.

Page 76: VB.NET – Nutzung von ADO - luis.uni- · PDF fileVB.NET und Datenbanken, 25.01.10 Seite 4 Namespace importieren Mit Hilfe von Imports wird ein Namespace (Namensraum) dem Programm

VB.NET und Datenbanken, 25.01.10 Seite 76

Erläuterung: Primärschlüssel

parameter = New OleDbParameter("IDKundeOld", OleDbType.UnsignedBigInt, 30000, "IDKunde")

Parameter, die den Primärschlüssel betreffen, werden mit Hilfe des Konstuktors des Objekts OleDbParameter erzeugt und anschließend der Auflistung hinzugefügt.

Der Parameter wird benötigt, um einen Datensatz eindeutig zu identifizieren.

Dem Konstruktor werden der Name des Parameters, der Datentyp, die Größe und der Name der dazugehörigen Spalte übergeben. Der Parameter und der Feldname müssen unterschiedliche Bezeichnungen haben.

Page 77: VB.NET – Nutzung von ADO - luis.uni- · PDF fileVB.NET und Datenbanken, 25.01.10 Seite 4 Namespace importieren Mit Hilfe von Imports wird ein Namespace (Namensraum) dem Programm

VB.NET und Datenbanken, 25.01.10 Seite 77

Erläuterung: Primärschlüssel

parameter = New OleDbParameter("IDKundeOld", OleDbType.UnsignedBigInt, 30000, "IDKunde")

parameter.SourceVersion = DataRowVersion.Original

Die Eigenschaft SourceVersion gibt Auskunft darüber, ob die aktuelle Zeile oder eine andere mit Hilfe der Anweisung aktualisiert wird.

Standardmäßig wird immer die aktuelle Zeile aktualisiert. Mit Hilfe von DataRowVersion.Original wird die Zeile aus der

Originalquelle aktualisiert.

Page 78: VB.NET – Nutzung von ADO - luis.uni- · PDF fileVB.NET und Datenbanken, 25.01.10 Seite 4 Namespace importieren Mit Hilfe von Imports wird ein Namespace (Namensraum) dem Programm

VB.NET und Datenbanken, 25.01.10 Seite 78

InsertCommand

sqlText = "INSERT INTO tblKunde (Firma, Anrede, Ansprechpartner, "sqlText = sqlText & "Straße, PLZ, Ort) VALUES(?, ?, ?, ?, ?, ?)"dataAdapter.InsertCommand = New OleDbCommand(sqlText, dbConnect)

With dataAdapter.InsertCommand.Parameters .Add("Firma", OleDbType.VarChar, 255, "Firma") .Add("Anrede", OleDbType.VarChar, 10, "Anrede") .Add("Ansprechpartner", OleDbType.VarChar, 255, "Ansprechpartner") .Add("Straße", OleDbType.VarChar, 255, "Straße") .Add("PLZ", OleDbType.VarChar, 5, "PLZ") .Add("Ort", OleDbType.VarChar, 255, "Ort")End With

Page 79: VB.NET – Nutzung von ADO - luis.uni- · PDF fileVB.NET und Datenbanken, 25.01.10 Seite 4 Namespace importieren Mit Hilfe von Imports wird ein Namespace (Namensraum) dem Programm

VB.NET und Datenbanken, 25.01.10 Seite 79

DeleteCommand

sqlText = "DELETE FROM tblKunde WHERE IDKunde = ?"dataAdapter.DeleteCommand = New OleDbCommand(sqlText, dbConnect)

parameter = New OleDbParameter("IDKundeOld", OleDbType.UnsignedBigInt, 30000, "IDKunde")parameter.SourceVersion = DataRowVersion.OriginaldataAdapter.DeleteCommand.Parameters.Add(parameter)

Page 80: VB.NET – Nutzung von ADO - luis.uni- · PDF fileVB.NET und Datenbanken, 25.01.10 Seite 4 Namespace importieren Mit Hilfe von Imports wird ein Namespace (Namensraum) dem Programm

VB.NET und Datenbanken, 25.01.10 Seite 80

DataTable löschen und füllen

Private dataTable As New DataTable()dataTable.Clear()dataAdapter.Fill(dataTable)

listKunde.DataSource = dataTable

Mit Hilfe der Methode .Clear() wird der Inhalt der Datentabelle gelöscht.

Die Methode .Fill() lädt die Daten aus der Datenbank in die angegebene Tabelle (dataTable). Die Methode löscht nicht den Inhalt der Tabelle!

Diese Tabelle kann wiederum als Datenquelle für ein DataGridView dienen.

Page 81: VB.NET – Nutzung von ADO - luis.uni- · PDF fileVB.NET und Datenbanken, 25.01.10 Seite 4 Namespace importieren Mit Hilfe von Imports wird ein Namespace (Namensraum) dem Programm

VB.NET und Datenbanken, 25.01.10 Seite 81

Änderungen zurückschreiben

Try dataAdapter.Update(dataTable) MsgBox("Die Daten wurden in der Datenquelle gespeicher!")Catch ex As Exception MessageBox.Show(ex.Message, "Fehler")End Try

Die Methode .Update() aktualisiert die Daten aus der Datenquelle mit den Daten aus der, in den runden Klammern angegebenen, Tabelle.

Für jeden geänderten Datensatz werden die entsprechenden SQL-Anweisungen ausgeführt. Wenn zum Beispiel ein Datensatz gelöscht wurde, wird DeleteCommand ausgeführt.

Page 82: VB.NET – Nutzung von ADO - luis.uni- · PDF fileVB.NET und Datenbanken, 25.01.10 Seite 4 Namespace importieren Mit Hilfe von Imports wird ein Namespace (Namensraum) dem Programm

VB.NET und Datenbanken, 25.01.10 Seite 82

Gültigkeitsprüfung für den Primärschlüssel

dataAdapter.MissingSchemaAction = MissingSchemaAction.AddWithKey

In diesem Beispiel werden Einschränkungen („NULL ist erlaubt“, „Maximale Länge“) für den Primärschlüssel aus der Datenquelle übernommen.

Nicht existierende Spalten werden zu einer DataTable hinzugefügt.

Andere Einstellungen für die Überprüfung sind möglich.

Page 83: VB.NET – Nutzung von ADO - luis.uni- · PDF fileVB.NET und Datenbanken, 25.01.10 Seite 4 Namespace importieren Mit Hilfe von Imports wird ein Namespace (Namensraum) dem Programm

VB.NET und Datenbanken, 25.01.10 Seite 83

DataTable

… entspricht einer Tabelle im lokalen Datenspeicher. … besteht aus Zeilen (Row) und Spalten (Column). … speichert die Daten in Form einer Auflistung von Zeilen. Jede Zeile in einer Tabelle sollte durch ein Schlüsselfeld

eindeutig gekennzeichnet sein.

Page 84: VB.NET – Nutzung von ADO - luis.uni- · PDF fileVB.NET und Datenbanken, 25.01.10 Seite 4 Namespace importieren Mit Hilfe von Imports wird ein Namespace (Namensraum) dem Programm

VB.NET und Datenbanken, 25.01.10 Seite 84

Neue Spalten erzeugen

Public Sub newTable() Dim dsKunde As DataSet = New DataSet

tblKunde = dsKunde.Tables.Add("tblKunde")

tblKunde.Columns.Add("IDKunde", System.Type.GetType("System.Int32")) tblKunde.Columns.Add("Anrede", System.Type.GetType("System.String")) tblKunde.Columns.Add("Kunde", System.Type.GetType("System.String")) tblKunde.Columns.Add("Strasse", System.Type.GetType("System.String")) tblKunde.Columns.Add("PLZ", System.Type.GetType("System.String")) tblKunde.Columns.Add("Ort", System.Type.GetType("System.String"))

End Sub

Page 85: VB.NET – Nutzung von ADO - luis.uni- · PDF fileVB.NET und Datenbanken, 25.01.10 Seite 4 Namespace importieren Mit Hilfe von Imports wird ein Namespace (Namensraum) dem Programm

VB.NET und Datenbanken, 25.01.10 Seite 85

Erläuterung

Mit Hilfe der Methode .Add() werden der Auflistung Columns neue Spalten hinzugefügt.

Folgende Parameter werden der Methode übergeben: Die Bezeichnung der Spalte. Der Name sollte immer den

Inhalt der Spalte widerspiegeln. Der Datentyp der Spalte wird mit Hilfe der Methode .GetType()

festgelegt. Die Methode ist im Namensraum System.Type definiert.

Page 86: VB.NET – Nutzung von ADO - luis.uni- · PDF fileVB.NET und Datenbanken, 25.01.10 Seite 4 Namespace importieren Mit Hilfe von Imports wird ein Namespace (Namensraum) dem Programm

VB.NET und Datenbanken, 25.01.10 Seite 86

Index einer Spalte

Dim key As IntegerDim zeile As DataRowDim indexKey As Integer

indexKey = tblKunde.Columns.IndexOf("IDKunde")

key = CInt(tblKunde.Rows(posKunde).Item(indexKey).ToString)

Page 87: VB.NET – Nutzung von ADO - luis.uni- · PDF fileVB.NET und Datenbanken, 25.01.10 Seite 4 Namespace importieren Mit Hilfe von Imports wird ein Namespace (Namensraum) dem Programm

VB.NET und Datenbanken, 25.01.10 Seite 87

Erläuterung

Der Index einer Spalte kann sich durch Löschen oder Verschieben von Spalten verändern. Der Index ist nicht an eine bestimmte Spalte gebunden.

Mit Hilfe der Methode .IndexOf() der Auflistung Columns wird der Spaltenindex einer Spalte mit Hilfe der Bezeichnung ermittelt.

In diesem Beispiel wird der momentane Index der Spalte „IDKunde“ ermittelt.

Page 88: VB.NET – Nutzung von ADO - luis.uni- · PDF fileVB.NET und Datenbanken, 25.01.10 Seite 4 Namespace importieren Mit Hilfe von Imports wird ein Namespace (Namensraum) dem Programm

VB.NET und Datenbanken, 25.01.10 Seite 88

Inhalt einer Spalte einer Zeile

Dim key As IntegerDim zeile As DataRowDim indexKey As Integer

indexKey = tblKunde.Columns.IndexOf("IDKunde")

key = CInt(tblKunde.Rows(posKunde).Item(indexKey).ToString)

Page 89: VB.NET – Nutzung von ADO - luis.uni- · PDF fileVB.NET und Datenbanken, 25.01.10 Seite 4 Namespace importieren Mit Hilfe von Imports wird ein Namespace (Namensraum) dem Programm

VB.NET und Datenbanken, 25.01.10 Seite 89

Erläuterung

Die Eigenschaft Item der Auflistung Rows liefert den Inhalt einer Zelle zurück.

Die Position einer Zelle wird durch die Zeilen- sowie Spaltenangabe festgelegt: Die gewünschte Zeile wird durch Angabe eines Indizes

ermittelt. Die gewünschte Spalte wird durch den entsprechenden

Spaltenindex festgelegt. Der Zelleninhalt wird häufig als String zurückgeliefert.

Page 90: VB.NET – Nutzung von ADO - luis.uni- · PDF fileVB.NET und Datenbanken, 25.01.10 Seite 4 Namespace importieren Mit Hilfe von Imports wird ein Namespace (Namensraum) dem Programm

VB.NET und Datenbanken, 25.01.10 Seite 90

Primärschlüssel

Dim keySpalte(1) As DataColumnDim mySpalte As DataColumn tblKunde.Columns.Add("IDKunde", System.Type.GetType("System.Int32"))tblKunde.Columns.Add("Anrede", System.Type.GetType("System.String"))tblKunde.Columns.Add("Kunde", System.Type.GetType("System.String"))tblKunde.Columns.Add("Strasse", System.Type.GetType("System.String"))tblKunde.Columns.Add("PLZ", System.Type.GetType("System.String"))tblKunde.Columns.Add("Ort", System.Type.GetType("System.String"))

keySpalte(0) = mySpaltetblKunde.PrimaryKey = keySpalte

Page 91: VB.NET – Nutzung von ADO - luis.uni- · PDF fileVB.NET und Datenbanken, 25.01.10 Seite 4 Namespace importieren Mit Hilfe von Imports wird ein Namespace (Namensraum) dem Programm

VB.NET und Datenbanken, 25.01.10 Seite 91

Array

Dim keySpalte(1) As DataColumn … definiert ein Array von Spalten. Ein Array besteht aus vielen verschiedenen Elementen vom

gleichen Typ. Das Array hat den Namen keySpalte In runden Klammern wird die Anzahl der Elemente

angegeben. Hier besteht das Array aus einem Element. keySpalte(0) = 5

In den runden Klammern wird ein Index angegeben. In diesem Beispiel wird das erste Element eines Arrays

angesprochen.

Page 92: VB.NET – Nutzung von ADO - luis.uni- · PDF fileVB.NET und Datenbanken, 25.01.10 Seite 4 Namespace importieren Mit Hilfe von Imports wird ein Namespace (Namensraum) dem Programm

VB.NET und Datenbanken, 25.01.10 Seite 92

Grafische Erläuterung

0

1

2

keySpalte(3)

DataColumn

DataColumn

DataColumn

Page 93: VB.NET – Nutzung von ADO - luis.uni- · PDF fileVB.NET und Datenbanken, 25.01.10 Seite 4 Namespace importieren Mit Hilfe von Imports wird ein Namespace (Namensraum) dem Programm

VB.NET und Datenbanken, 25.01.10 Seite 93

Primärschlüssel

… identifiziert eindeutig eine Zeile in einer Tabelle. … kann aus mehreren Spalten zusammengesetzt werden. tblKunde.PrimaryKey legt den Primärschlüssel für die eine Tabelle

fest. In diesem Beispiel wird der Schlüssel für die Tabelle „tblKunde“ festgelegt. Eigenschaft und Objekt werden durch ein Punkt getrennt.

Mit Hilfe des Gleichheitszeichen wird der Eigenschaft ein Wert zugewiesen. In diesem Fall wird dem Schlüssel ein Array zugewiesen. Die einzelnen Elemente des Arrays enthalten die verschiedenen Schlüsselspalten. Aus den angegebenen Spalten wird der Schlüssel zusammengesetzt.

Page 94: VB.NET – Nutzung von ADO - luis.uni- · PDF fileVB.NET und Datenbanken, 25.01.10 Seite 4 Namespace importieren Mit Hilfe von Imports wird ein Namespace (Namensraum) dem Programm

VB.NET und Datenbanken, 25.01.10 Seite 94

AutoWert nutzen

tblKunde.Columns.Add("IDKunde", System.Type.GetType("System.Int32")) tblKunde.Columns.Add("Anrede", System.Type.GetType("System.String")) tblKunde.Columns.Add("Kunde", System.Type.GetType("System.String")) tblKunde.Columns.Add("Strasse", System.Type.GetType("System.String")) tblKunde.Columns.Add("PLZ", System.Type.GetType("System.String")) tblKunde.Columns.Add("Ort", System.Type.GetType("System.String"))

mySpalte = tblKunde.Columns("IDKunde") mySpalte.AutoIncrement = True mySpalte.AutoIncrementSeed = 10 'Anfangswerte mySpalte.AutoIncrementStep = 1 'Inkrement mySpalte.ReadOnly = True

Page 95: VB.NET – Nutzung von ADO - luis.uni- · PDF fileVB.NET und Datenbanken, 25.01.10 Seite 4 Namespace importieren Mit Hilfe von Imports wird ein Namespace (Namensraum) dem Programm

VB.NET und Datenbanken, 25.01.10 Seite 95

Erläuterung

Die Eigenschaft AutoIncrement bezieht sich immer auf eine Spalte in einer Tabelle.

Mit Hilfe der Eigenschaft AutoIncrementSeed wird der Anfangswert für den ersten Datensatz festgelegt.

Die Eigenschaft AutoIncrementStep legt die Schrittweite zwischen den einzelnen Werten fest.

Spalten mit einem AutoWert sollten schreibgeschützt werden.

Page 96: VB.NET – Nutzung von ADO - luis.uni- · PDF fileVB.NET und Datenbanken, 25.01.10 Seite 4 Namespace importieren Mit Hilfe von Imports wird ein Namespace (Namensraum) dem Programm

VB.NET und Datenbanken, 25.01.10 Seite 96

Neue Datensätze

neueZeile = tblKunde.NewRow

neueZeile("Anrede") = txtAnrede.TextneueZeile("Vorname") = txtVorname.TextneueZeile("Nachname") = txtNachname.TextneueZeile("Strasse") = txtStrasse.TextneueZeile("PLZ") = txtPLZ.TextneueZeile("ort") = txtOrt.Text

tblKunde.Rows.Add(neueZeile)

Page 97: VB.NET – Nutzung von ADO - luis.uni- · PDF fileVB.NET und Datenbanken, 25.01.10 Seite 4 Namespace importieren Mit Hilfe von Imports wird ein Namespace (Namensraum) dem Programm

VB.NET und Datenbanken, 25.01.10 Seite 97

Ablauf

Ein neues DataRow-Objekt wird erzeugt. Das Objekt symbolisiert den Aufbau einer Zeile in einer bestimmten Tabelle.

Anschließend wird jeder Spalte in dieser Zeile ein Wert zugewiesen.

Das neu erstellte Objekt wird der Tabelle als Datensatz hinzugefügt.

Page 98: VB.NET – Nutzung von ADO - luis.uni- · PDF fileVB.NET und Datenbanken, 25.01.10 Seite 4 Namespace importieren Mit Hilfe von Imports wird ein Namespace (Namensraum) dem Programm

VB.NET und Datenbanken, 25.01.10 Seite 98

Neues Datenobjekt erzeugen

Die Methode tblKunde.NewRow erzeugt ... eine neue Zeile entsprechend dem Schema in der

angegebenen Tabelle. ... ein neues DataRow-Objekt.

Der Tabellennamen wird mit Hilfe des Punkts von der Methode getrennt.

Das erzeugte Objekt wird mit Hilfe des Gleichheitszeichens einer Variablen vom Typ DataRow zugewiesen.

Dim neueZeile As DataRow

neueZeile = tblKunde.NewRow

Page 99: VB.NET – Nutzung von ADO - luis.uni- · PDF fileVB.NET und Datenbanken, 25.01.10 Seite 4 Namespace importieren Mit Hilfe von Imports wird ein Namespace (Namensraum) dem Programm

VB.NET und Datenbanken, 25.01.10 Seite 99

Wert einer Zelle zuweisen

Jede Spalte wird mit Hilfe des Gleichheitszeichens ein Wert zugewiesen. In diesem Beispiel wird der Inhalt eines Textfeldes einer Spalte zugewiesen.

Die gewünschte Spalte kann ... als Index in runden Klammern angegeben werden. Der

Spaltenname wird wie alle Strings durch Anführungszeichen begrenzt.

... durch ein Ausrufezeichen vom Namen der Zeile getrennt werden.

neueZeile("Anrede") = txtAnrede.Text

neueZeile!Anrede = txtAnrede.Text

Page 100: VB.NET – Nutzung von ADO - luis.uni- · PDF fileVB.NET und Datenbanken, 25.01.10 Seite 4 Namespace importieren Mit Hilfe von Imports wird ein Namespace (Namensraum) dem Programm

VB.NET und Datenbanken, 25.01.10 Seite 100

… als Datensatz hinzufügen

Mit Hilfe der Methode .Add der Rows-Auflistung wird ein neuer Datensatz erzeugt.

In diesem Beispiel wird ein neuer Datensatz in der Tabelle tblKunde erzeugt.

Als Parameter wird der Methode die neue Zeile übergeben. Die Methode überprüft die Daten auf Gültigkeit und

Einschränkung. Zum Beispiel eine leere Zelle, deren Spalte keine Null-Werte erlaubt, erzeugt einen Fehler.

tblKunde.Rows.Add(neueZeile)

Page 101: VB.NET – Nutzung von ADO - luis.uni- · PDF fileVB.NET und Datenbanken, 25.01.10 Seite 4 Namespace importieren Mit Hilfe von Imports wird ein Namespace (Namensraum) dem Programm

VB.NET und Datenbanken, 25.01.10 Seite 101

Datensätze suchen

Dim key As String Dim zeile As DataRow

key = tblKunde.Rows(posKunde).Item(0).ToString

If Not tblKunde.Rows.Contains(key) Then Exit Sub End If

zeile = tblKunde.Rows(posKunde)

Page 102: VB.NET – Nutzung von ADO - luis.uni- · PDF fileVB.NET und Datenbanken, 25.01.10 Seite 4 Namespace importieren Mit Hilfe von Imports wird ein Namespace (Namensraum) dem Programm

VB.NET und Datenbanken, 25.01.10 Seite 102

Erläuterung

Der Methode .Contains() .. überprüft, ob ein Datensatz mit den angegebenen

Schlüssel vorhanden ist. … wird ein Wert für den Primärschlüssel übergeben. … gibt true (wahr) zurück, wenn der Schlüsselwert in der

Tabelle vorhanden ist.

Page 103: VB.NET – Nutzung von ADO - luis.uni- · PDF fileVB.NET und Datenbanken, 25.01.10 Seite 4 Namespace importieren Mit Hilfe von Imports wird ein Namespace (Namensraum) dem Programm

VB.NET und Datenbanken, 25.01.10 Seite 103

Datensätze suchen

Dim key As Integer Dim zeile As DataRow Dim indexKey As Integer

indexKey = tblKunde.Columns.IndexOf("IDKunde")

key = CInt(tblKunde.Rows(posKunde).Item(indexKey).ToString)

zeile = tblKunde.Rows.Find(key) If (zeile Is Nothing) Then Exit Sub

tblKunde.Rows.Remove(tblKunde.Rows(posKunde))

Page 104: VB.NET – Nutzung von ADO - luis.uni- · PDF fileVB.NET und Datenbanken, 25.01.10 Seite 4 Namespace importieren Mit Hilfe von Imports wird ein Namespace (Namensraum) dem Programm

VB.NET und Datenbanken, 25.01.10 Seite 104

Erläuterung

Der Methode .Find() … wird ein Wert für den Primärschlüssel übergeben. … gibt den Datensatz mit dem angegebenen

Primärschlüssel zurück. … gibt NULL zurück, wenn kein Datensatz mit den

angegeben Schlüsselwert vorhanden ist.

Page 105: VB.NET – Nutzung von ADO - luis.uni- · PDF fileVB.NET und Datenbanken, 25.01.10 Seite 4 Namespace importieren Mit Hilfe von Imports wird ein Namespace (Namensraum) dem Programm

VB.NET und Datenbanken, 25.01.10 Seite 105

Datensätze ändern

Dim zeile As DataRowzeile = tblKunde.Rows(posKunde)

zeile.BeginEdit()zeile("Anrede") = txtAnrede.Textzeile("Vorname") = txtVorname.Textzeile("Nachname") = txtNachname.Textzeile("Strasse") = txtStrasse.Textzeile("PLZ") = txtPLZ.Textzeile("ort") = txtOrt.Textzeile.EndEdit()

tblKunde.AcceptChanges()

Page 106: VB.NET – Nutzung von ADO - luis.uni- · PDF fileVB.NET und Datenbanken, 25.01.10 Seite 4 Namespace importieren Mit Hilfe von Imports wird ein Namespace (Namensraum) dem Programm

VB.NET und Datenbanken, 25.01.10 Seite 106

Status einer Datenzeile

Der Status einer Zeile kann mit Hilfe von RowState abgefragt werden. Hinzufügen, Added, 1 Löschen, Deleted, 2 Geändert, Modified, 4 Keine Änderung, Unchanged, 5

Die Methode .AcceptChanges() der DataTable übernimmt alle Änderungen an den Zeilen in die Tabelle. Die Methode wird häufig nach einem Update der Tabelle aufgerufen. Die Methode setzt den Status der geänderten und hinzugefügten Zeilen auf Unchanged. Zu entfernende Zeilen werden gelöscht.

Page 107: VB.NET – Nutzung von ADO - luis.uni- · PDF fileVB.NET und Datenbanken, 25.01.10 Seite 4 Namespace importieren Mit Hilfe von Imports wird ein Namespace (Namensraum) dem Programm

VB.NET und Datenbanken, 25.01.10 Seite 107

Versionen einer Datenzeile lesen

In diesem Beispiel wird eine bestimmte Spalte einer Zeile angesprochen.

In den runden Klammern wird … eine Spaltenummer oder -bezeichnung sowie .. die gewünschte Version angegeben.

Mit Hilfe der Methode .HasVersion(DataRowVersion.Current) kann überprüft werden, ob die gewünschte Version vorhanden ist.

txtNachname.Text = zeile(indexID, DataRowVersion.Current).ToString

Page 108: VB.NET – Nutzung von ADO - luis.uni- · PDF fileVB.NET und Datenbanken, 25.01.10 Seite 4 Namespace importieren Mit Hilfe von Imports wird ein Namespace (Namensraum) dem Programm

VB.NET und Datenbanken, 25.01.10 Seite 108

Mögliche Versionen

Orginal enthält die Originaldaten aus der Datenquelle. Neu hinzugefügte Datensätze besitzen keine Originaldaten.

Current beschreibt den aktuellen Wert eines Datensatzes. Gelöschte Datensätze verfügen über keine aktuelle Daten. Nach einer Änderungen der Daten haben Current und Original

unterschiedliche Werte. Proposed enthält den geänderten Wert, bevor dieser zum

aktuellen Wert wird. Der Nutzer schlägt einen neuen Wert für die Zelle vor.

Default arbeitet mit den eingestellten Default-Wert.

Page 109: VB.NET – Nutzung von ADO - luis.uni- · PDF fileVB.NET und Datenbanken, 25.01.10 Seite 4 Namespace importieren Mit Hilfe von Imports wird ein Namespace (Namensraum) dem Programm

VB.NET und Datenbanken, 25.01.10 Seite 109

Bearbeitungsstatus

Die Methode .BeginEdit() startet den Bearbeitungsmodus. Die Methode .EndEdit() beendet den Bearbeitungsmodus einer

Zeile. Änderungen in diesem Modus lösen das Ereignis ColumnChanged

der DataTable aus.

Page 110: VB.NET – Nutzung von ADO - luis.uni- · PDF fileVB.NET und Datenbanken, 25.01.10 Seite 4 Namespace importieren Mit Hilfe von Imports wird ein Namespace (Namensraum) dem Programm

VB.NET und Datenbanken, 25.01.10 Seite 110

Ereignis „Spalte geändert“

Private Sub onColumnChanged(ByVal sender As Object, ByVal args As DataColumnChangeEventArgs) Handles tblKunde.ColumnChanged ... If args.Column.ColumnName = "Nachname" Then If args.ProposedValue.ToString = String.Empty Then MsgBox("Der Nachname muss angegeben werden.") args.Row.CancelEdit()

zeile = args.Row indexID = tblKunde.Columns.IndexOf("Nachname") txtNachname.Text = zeile(indexID, DataRowVersion.Current).ToString End If End If

Page 111: VB.NET – Nutzung von ADO - luis.uni- · PDF fileVB.NET und Datenbanken, 25.01.10 Seite 4 Namespace importieren Mit Hilfe von Imports wird ein Namespace (Namensraum) dem Programm

VB.NET und Datenbanken, 25.01.10 Seite 111

Erläuterung

Der Parameter args enthält verschiedene Informationen zu der zu ändernden Zeile.

Mit Hilfe von args.Column die zu ändernde Spalte in der Datenzeile beschrieben. Die Informationen können nur gelesen werden.

Mit Hilfe von args.Row kann auf die zu ändernde Datenzeile zugegriffen werden.

Die Eigenschaft ProposedValue enthält den geänderten Wert. Mit Hilfe der Methode .CancelEdit() wird die Änderung

zurückgenommen. Der Datensatz behält seine aktuellen Werte. Die vorgeschlagenen Werte werden nicht angenommen.

Page 112: VB.NET – Nutzung von ADO - luis.uni- · PDF fileVB.NET und Datenbanken, 25.01.10 Seite 4 Namespace importieren Mit Hilfe von Imports wird ein Namespace (Namensraum) dem Programm

VB.NET und Datenbanken, 25.01.10 Seite 112

WithEvents

Es wird eine Variable tblKunde vom Objekttyp DataTable erstellt. Die Variable ist privat. Das heißt, sie ist nur innerhalb der

Klasse oder Prozedur bekannt, in der sie definiert ist. Diese Variable kann auf Ereignisse reagieren (WithEvents). In

diesem Beispiel reagiert die Tabelle auf das Ereignis „Spalte geändert“.

Jedes Steuerelement wird in [Form].Designer.vb mit dieser Zeile deklariert.

Private WithEvents tblKunde As DataTable

Page 113: VB.NET – Nutzung von ADO - luis.uni- · PDF fileVB.NET und Datenbanken, 25.01.10 Seite 4 Namespace importieren Mit Hilfe von Imports wird ein Namespace (Namensraum) dem Programm

VB.NET und Datenbanken, 25.01.10 Seite 113

Datensätze löschen

Dim key As Integer Dim zeile As DataRow Dim indexKey As Integer

indexKey = tblKunde.Columns.IndexOf("IDKunde")

key = CInt(tblKunde.Rows(posKunde).Item(indexKey).ToString)

zeile = tblKunde.Rows.Find(key) If (zeile Is Nothing) Then Exit Sub

tblKunde.Rows.Remove(tblKunde.Rows(posKunde))

Page 114: VB.NET – Nutzung von ADO - luis.uni- · PDF fileVB.NET und Datenbanken, 25.01.10 Seite 4 Namespace importieren Mit Hilfe von Imports wird ein Namespace (Namensraum) dem Programm

VB.NET und Datenbanken, 25.01.10 Seite 114

Hinweis

Der Datensatz wird aus den lokalen Speicher gelöscht. Ein Datensatz sollte nur aus der DataTable gelöscht werden,

wenn die Daten in eine elektronische Datei gespeichert werden.

Falls eine Datenbank als Datenquelle existiert, müssen die Daten synchronisiert werden.