Galileo Computing < openbook > Galileo Computing - Professionelle Bücher. Auch für Einsteiger.
Professionelle Bücher. Auch für Einsteiger.

Inhaltsverzeichnis
Vorwort zur 6. Auflage
1 Allgemeine Einführung in .NET
2 Grundlagen der Sprache C#
3 Das Klassendesign
4 Vererbung, Polymorphie und Interfaces
5 Delegates und Ereignisse
6 Strukturen und Enumerationen
7 Fehlerbehandlung und Debugging
8 Auflistungsklassen (Collections)
9 Generics – Generische Datentypen
10 Weitere C#-Sprachfeatures
11 LINQ
12 Arbeiten mit Dateien und Streams
13 Binäre Serialisierung
14 XML
15 Multithreading und die Task Parallel Library (TPL)
16 Einige wichtige .NET-Klassen
17 Projektmanagement und Visual Studio 2012
18 Einführung in die WPF und XAML
19 WPF-Layout-Container
20 Fenster in der WPF
21 WPF-Steuerelemente
22 Elementbindungen
23 Konzepte von WPF
24 Datenbindung
25 Weitere Möglichkeiten der Datenbindung
26 Dependency Properties
27 Ereignisse in der WPF
28 WPF-Commands
29 Benutzerdefinierte Controls
30 2D-Grafik
31 ADO.NET – Verbindungsorientierte Objekte
32 ADO.NET – Das Command-Objekt
33 ADO.NET – Der SqlDataAdapter
34 ADO.NET – Daten im lokalen Speicher
35 ADO.NET – Aktualisieren der Datenbank
36 Stark typisierte DataSets
37 Einführung in das ADO.NET Entity Framework
38 Datenabfragen des Entity Data Models (EDM)
39 Entitätsaktualisierung und Zustandsverwaltung
40 Konflikte behandeln
41 Plain Old CLR Objects (POCOs)
Stichwort

Download:
- Beispiele, ca. 62,4 MB

Buch bestellen
Ihre Meinung?

Spacer
Visual C# 2012 von Andreas Kühnel
Das umfassende Handbuch
Buch: Visual C# 2012

Visual C# 2012
Rheinwerk Computing
1402 S., 6., aktualisierte und erweiterte Auflage 2013, geb., mit DVD
49,90 Euro, ISBN 978-3-8362-1997-6
Pfeil 33 ADO.NET – Der SqlDataAdapter
Pfeil 33.1 Was ist ein DataAdapter?
Pfeil 33.2 Die Konstruktoren der Klasse DataAdapter
Pfeil 33.3 Arbeiten mit dem SqlDataAdapter
Pfeil 33.3.1 Die Eigenschaft »SelectCommand«
Pfeil 33.3.2 Den lokalen Datenspeicher mit »Fill« füllen
Pfeil 33.3.3 Öffnen und Schließen von Verbindungen
Pfeil 33.3.4 Doppelter Aufruf der Fill-Methode
Pfeil 33.3.5 Mehrere DataAdapter-Objekte aufrufen
Pfeil 33.3.6 Die Spalten- und der Tabellenbezeichner einer DataTable
Pfeil 33.3.7 Paging mit der Fill-Methode
Pfeil 33.4 Tabellenzuordnung mit der Klasse »TableMappings«
Pfeil 33.4.1 Spaltenzuordnungen in einem DataSet
Pfeil 33.4.2 Spaltenzuordnungen einer DataTable
Pfeil 33.4.3 Die Eigenschaft »MissingMappingAction« des DataAdapters
Pfeil 33.5 Das Ereignis »FillError« des SqlDataAdapters

33 ADO.NET – Der SqlDataAdapterZur nächsten Überschrift


Galileo Computing - Zum Seitenanfang

33.1 Was ist ein DataAdapter?Zur nächsten ÜberschriftZur vorigen Überschrift

Weiter oben haben Sie erfahren, wie Sie ein SQL-Kommando gegen eine Datenbank absetzen. Sie wissen, dass mit der Methode ExecuteNonQuery des SqlCommand-Objekts eine Aktionsabfrage ausgeführt werden kann und von ExecuteReader ein SqlDataReader-Objekt zurückgeliefert wird, in dem wir eine Datenzeile nach der anderen durchlaufen. Für ganz einfache Anforderungen mag das durchaus genügen. Für die Praxis sind die Anforderungen damit aber nicht ausreichend abgedeckt.

Was ist, wenn wir es dem Anwender ermöglichen wollen, beliebig zwischen den einzelnen Datensätzen zu navigieren? Wie kann ein Anwender die eingelesenen Datensätze aktualisieren? Wie kann seitens der Anwendung sichergestellt werden, dass bei der Aktualisierung Einschränkungen (constraints) berücksichtigt werden?

Grundsätzlich ließen sich diese und viele weitere Fragen mit dem SqlCommand- und dem SqlDataReader-Objekt beantworten. Aber denken wir einen Schritt weiter. Beide Objekte sind von einer geöffneten Verbindung zur Datenbank abhängig. Wollen wir es einem Anwender ermöglichen, durch die Datensätze zu navigieren, müssten wir entweder die Verbindung zur Datenquelle für einen längeren Zeitraum geöffnet halten oder die einzelnen Datensätze lokal zwischenspeichern.

Eine Verbindung länger als unbedingt notwendig geöffnet zu halten, ist aus vielerlei Hinsicht nicht akzeptabel. Stellen Sie sich beispielsweise eine Datenbank im Internet vor: Eine geöffnete Verbindung kostet Geld, und die Netzwerkressourcen werden belastet. Zudem ist die Anzahl der gleichzeitigen Zugriffe auf eine Datenbank begrenzt.

Eine optimale Lösung müsste mindestens die folgende Fähigkeit haben: Einlesen und Zwischenspeichern aller Datensätze im lokalen Speicher. Wir brauchen diesen Ansatz jedoch nicht selbst zu programmieren, er wird uns von ADO.NET angeboten. Als Bindeglied zwischen der Datenquelle und dem lokalen Speicher dient dazu ein spezielles Objekt vom Typ SqlDataAdapter. Es hat die Fähigkeit, Daten aus einer Datenquelle abzufragen und sie in einer oder mehreren Tabellen des lokalen Speichers abzulegen. Darüber kann ein SqlDataAdapter-Objekt aber auch Änderungen in den Tabellen des lokalen Speichers an die Datenquelle übermitteln. Um die Netzwerk- und Datenbankbelastung so gering wie möglich zu halten, baut das SqlDataAdapter-Objekt nur dann eine Verbindung zur Datenbank auf, wenn dies notwendig ist. Sind alle Operationen beendet, wird die Verbindung wieder geschlossen.

Im Zusammenhang mit einem SqlDataAdapter spielen auch SqlConnection- und SqlCommand-Objekte eine wichtige Rolle. Alle drei sind providerspezifisch und werden zu den verbundenen Typen des ADO.NET-Objektmodells gezählt. Die Daten im lokalen Speicher, die von speziellen Objekten verwaltet und organisiert werden, werden zu den unverbundenen Typen des ADO.NET-Objektmodells gerechnet. Ein SqlDataAdapter kann daher als Bindeglied zwischen den verbundenen und den unverbundenen Objekten angesehen werden.

Ein SqlDataAdapter spielt in zwei Situationen eine wichtige Rolle:

  • beim Füllen eines DataSets oder DataTable
  • beim Aktualisieren der geänderten Inhalte von DataSet bzw. DataTable

In diesem Kapitel werden wir uns ausschließlich mit dem Abrufen von Dateninformationen und dem sich daran anschließenden Füllen der lokalen Objekte beschäftigen. Die andere Fähigkeit des SqlDataAdapters sehen wir uns an, wenn wir das DataSet ausgiebig studiert haben.

Ein Programmbeispiel

Ehe wir uns mit dem DataAdapter-Objekt genauer beschäftigen, möchte ich Ihnen ein Beispiel vorstellen, das einen SqlDataAdapter benutzt, um den lokalen Speicher mit allen Datensätzen der Tabelle Products zu füllen. Abgefragt werden nur die Spalten ProductName und UnitPrice. Die lokale Datensatzliste wird anschließend an der Konsole ausgegeben. Dazu werden alle Datensätze in einer Schleife durchlaufen.

// Beispiel: ..\Kapitel 33\DataAdapterSample

static void Main(string[] args) {
SqlConnection con = new SqlConnection("...");
string strSQL = "SELECT ProductName, UnitPrice FROM products";
SqlDataAdapter da = new SqlDataAdapter(strSQL, con);
DataTable tbl = new DataTable();
da.Fill(tbl);

// Anzeige der Daten im lokalen Speicher

for (int i = 0; i < tbl.Rows.Count; i++)
{
DataRow row = tbl.Rows[i];
Console.WriteLine("{0,-35} {1} ", row[0], row[1]);
}
}

Listing 33.1 Einsatz eines »SqlDataAdapter«-Objekts

Vorausgesetzt, Sie haben die Verbindungszeichenfolge so eingerichtet, dass Sie die Northwind-Datenbank auf Ihrem eigenen Rechner adressiert haben, sollten Sie das Ergebnis im Konsolenfenster sehen. Auf die genaue Erklärung des Codes soll hier noch verzichtet werden.



Ihr Kommentar

Wie hat Ihnen das <openbook> gefallen? Wir freuen uns immer über Ihre freundlichen und kritischen Rückmeldungen.

>> Zum Feedback-Formular
<< zurück
  Zum Katalog
Zum Katalog: Visual C# 2012

Visual C# 2012
Jetzt bestellen


 Ihre Meinung?
Wie hat Ihnen das <openbook> gefallen?
Ihre Meinung

 Buchempfehlungen
Zum Katalog: Professionell entwickeln mit Visual C# 2012






 Professionell
 entwickeln mit
 Visual C# 2012


Zum Katalog: Windows Presentation Foundation






 Windows Presentation
 Foundation


Zum Katalog: Schrödinger programmiert C++






 Schrödinger
 programmiert C++


Zum Katalog: C++ Handbuch






 C++ Handbuch


Zum Katalog: C/C++






 C/C++


 Shopping
Versandkostenfrei bestellen in Deutschland und Österreich
InfoInfo





Copyright © Rheinwerk Verlag GmbH 2013
Für Ihren privaten Gebrauch dürfen Sie die Online-Version natürlich ausdrucken. Ansonsten unterliegt das <openbook> denselben Bestimmungen, wie die gebundene Ausgabe: Das Werk einschließlich aller seiner Teile ist urheberrechtlich geschützt. Alle Rechte vorbehalten einschließlich der Vervielfältigung, Übersetzung, Mikroverfilmung sowie Einspeicherung und Verarbeitung in elektronischen Systemen.


[Rheinwerk Computing]

Rheinwerk Verlag GmbH, Rheinwerkallee 4, 53227 Bonn, Tel.: 0228.42150.0, Fax 0228.42150.77, service@rheinwerk-verlag.de