Rheinwerk Computing < openbook > Rheinwerk 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

Jetzt 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 32 ADO.NET – Das Command-Objekt
Pfeil 32.1 Die Datenbankabfrage
Pfeil 32.2 Das SqlCommand-Objekt
Pfeil 32.2.1 Erzeugen eines SqlCommand-Objekts
Pfeil 32.2.2 Die Methode »CreateCommand« des Connection-Objekts
Pfeil 32.2.3 Ausführen des SqlCommand-Objekts
Pfeil 32.2.4 Die Eigenschaft »CommandTimeout« des SqlCommand-Objekts
Pfeil 32.3 Aktionsabfragen absetzen
Pfeil 32.3.1 Datensätze hinzufügen
Pfeil 32.3.2 Datensätze löschen
Pfeil 32.3.3 Datensätze ändern
Pfeil 32.3.4 Abfragen, die genau ein Ergebnis liefern
Pfeil 32.4 Das SqlDataReader-Objekt
Pfeil 32.4.1 Datensätze einlesen
Pfeil 32.4.2 Schließen des SqlDataReader-Objekts
Pfeil 32.4.3 MARS (Multiple Active Resultsets)
Pfeil 32.4.4 Batchabfragen mit »NextResult« durchlaufen
Pfeil 32.4.5 Das Schema eines SqlDataReader-Objekts untersuchen
Pfeil 32.5 Parametrisierte Abfragen
Pfeil 32.5.1 Parametrisierte Abfragen mit dem SqlClient-Datenprovider
Pfeil 32.5.2 Die Klasse »SqlParameter«
Pfeil 32.5.3 Asynchrone Abfragen
Pfeil 32.5.4 Gespeicherte Prozeduren (Stored Procedures)

Rheinwerk Computing - Zum Seitenanfang

32.2 Das SqlCommand-ObjektZur nächsten Überschrift

Das SqlCommand-Objekt repräsentiert einen SQL-Befehl oder eine gespeicherte Prozedur. In der Eigenschaft CommandText wird die SQL-Anweisung bzw. die gespeicherte Prozedur festgelegt. Die Ausführung wird mit einer der Execute-Methoden gestartet.

Als kleiner Vorgeschmack soll das folgende Beispiel dienen. Es wird darin die Verbindung zu der Beispieldatenbank Northwind des SQL Servers aufgebaut. In der Tabelle Products, in der alle Artikel geführt sind, ist unter anderem ein Artikel mit der Bezeichnung Chai (Spalte ProductName) vorhanden. Angenommen, dieser sei falsch und soll nun in Sojasauce geändert werden. Dazu übergeben wir der Eigenschaft CommandText des SqlCommand-Objekts ein entsprechendes UPDATE-Kommando und führen es mit ExecuteNonQuery aus. Der Rückgabewert der Methode ist vom Typ int und gibt darüber Auskunft, wie viele Datensätze von der Änderung betroffen sind.

// Beispiel: ..\Kapitel 32\ExecuteNonQuerySample
static void Main(string[] args) {
SqlConnection con = new SqlConnection("...");
SqlCommand cmd = new SqlCommand();
cmd.CommandText =
"UPDATE Products SET ProductName='Sojasauce' WHERE ProductName='Chai'";
cmd.Connection = con;
con.Open();
if( cmd.ExecuteNonQuery() > 0)
Console.WriteLine("Erfolgreich aktualisiert!") ;
con.Close();
}

Listing 32.1 Die Methode »ExecuteNonQuery«

Die genaue Angabe der Verbindungszeichenfolge ist hier ausgelassen – so wie in den meisten folgenden Beispielen auch. Sie können diese dem Kapitel 31 entnehmen und, falls notwendig, entsprechend Ihrer eigenen lokalen Installation anpassen.

Vom Erfolg der Operation können Sie sich auf verschiedene Weisen überzeugen. Sie können sich einerseits mit dem Tool SQL Server Management Studio von SQL Server 2008 den Inhalt der nun geänderten Tabelle anzeigen lassen. Sie können aber auch den Server-Explorer von Visual Studio 2012 verwenden, den Sie über das Menü Ansicht öffnen. Fügen Sie über das Kontextmenü des Knotens Datenverbindungen die Verbindung zu der Datenbank Northwind hinzu. Ein Assistent, den wir uns später in diesem Buch noch genauer ansehen werden, begleitet Sie durch den gesamten Prozess, an dessen Ende Sie die Möglichkeit haben, sich den aktuellen Inhalt der Tabelle Products in Visual Studio 2012 anzeigen zu lassen.


Rheinwerk Computing - Zum Seitenanfang

32.2.1 Erzeugen eines SqlCommand-ObjektsZur nächsten ÜberschriftZur vorigen Überschrift

Um ein Kommando gegen eine Datenbank abzusetzen, wird ein SqlCommand-Objekt benötigt. Es spielt dabei keine Rolle, ob es sich um eine Auswahlabfrage (SELECT) oder Aktionsabfrage (INSERT, UPDATE oder DELETE) handelt. Das SQL-Kommando wird der Eigenschaft CommandText des SqlCommand-Objekts zugewiesen. Das ist aber noch nicht ausreichend, denn zusätzlich zum Befehl muss das SqlCommand-Objekt auch den Datenbankserver und die Datenbank kennen. Das heißt nichts anderes, als dass das SqlCommand-Objekt wissen muss, welches SqlConnection-Objekt die Verbindung zur Datenbank beschreibt.

Um diese Anforderungen zu erfüllen, stehen Ihnen mehrere Konstruktoren zur Verfügung. Sie können, wie im Beispiel zuvor gezeigt, den parameterlosen Konstruktor bemühen, müssen dann aber der Eigenschaft SqlConnection des SqlCommand-Objekts die Referenz auf SqlConnection mitteilen. Einer anderen Konstruktorüberladung können Sie neben dem abzusetzenden Kommando auch die Referenz auf das SqlConnection-Objekt übergeben.

SqlCommand cmd = new SqlCommand("UPDATE Products " +
"SET ProductName='Sojasauce' " +
"WHERE ProductName='Chai'", con);

Listing 32.2 Definition eines UPDATE-SqlCommands


Rheinwerk Computing - Zum Seitenanfang

32.2.2 Die Methode »CreateCommand« des Connection-ObjektsZur nächsten ÜberschriftZur vorigen Überschrift

Es gibt noch eine zweite Variante, eine Referenz auf ein SqlCommand-Objekt zu erhalten. Dazu wird die Methode CreateCommand auf das SqlConnection-Objekt aufgerufen, die als Rückgabewert das providerspezifische SqlCommand-Objekt liefert.

SqlConnection con = new SqlConnection("...");
SqlCommand cmd = con.CreateCommand();

Rheinwerk Computing - Zum Seitenanfang

32.2.3 Ausführen des SqlCommand-ObjektsZur nächsten ÜberschriftZur vorigen Überschrift

Die CommandText-Eigenschaft legt das Kommando fest, das ausgeführt werden soll. Es kann sich dabei um ein SQL-Kommando oder eine gespeicherte Prozedur handeln. Bei den SQL-Kommandos werden zwei Kategorien unterschieden:

  • Auswahlabfragen
  • Aktionsabfragen

Eine Auswahlabfrage basiert auf dem SELECT-Statement und liefert ein Ergebnis zurück. Dazu gehören auch die Abfragen, die eine Aggregatfunktion wie SUM oder COUNT aufrufen und nur einen Ergebniswert liefern. Eine typische Auswahlabfrage wäre zum Beispiel

SELECT ProductName, UnitPrice FROM Products WHERE UnitPrice < 100

Das Resultat dieser Abfrage bilden alle Datensätze der Tabelle Northwind, die diejenigen Produkte beschreiben, deren Preis kleiner 100 ist.

Eine Aktionsabfrage manipuliert die Datenbank. Dabei kann es sich um Folgendes handeln:

  • die Aktualisierung der Daten (DML-Abfrage = Data-Manipulation-Language-Abfrage)
  • die Änderung der Datenbankstruktur (DDL-Abfrage = Data-Definition-Language-Abfrage)

Mit

UPDATE Products
SET ProductName='Sojasauce'
WHERE ProductName='Chai'

hatten wir eingangs eine Aktualisierungsabfrage abgesetzt, die zwar einen Datensatz in Products änderte, selbst aber keine Ergebnismenge lieferte.

Wie Sie sehen, führt das Absetzen eines Befehls zu ganz unterschiedlichen Reaktionen des Datenbankservers. Das SqlCommand-Objekt trägt dem Rechnung und stellt mit

  • ExecuteNonQuery
  • ExecuteReader
  • ExecuteScalar
  • ExecuteXmlReader

vier Methoden zur Verfügung, die speziell auf die einzelnen Abfragen abgestimmt sind und synchron ausgeführt werden. Synchron bedeutet, dass die Clientanwendung nach dem Methodenaufruf so lange wartet, bis das Ergebnis der Frage vom Datenbankserver eintrifft. Gegebenenfalls kann das eine längere Zeitspanne beanspruchen. Daher wurde mit der Einführung von ADO.NET 2.0 auch die Möglichkeit eingeräumt, Datenbankabfragen asynchron auszuführen. Der Client muss dann nicht warten, bis die Abfrageausführung beendet ist, sondern kann weiterarbeiten, bis ihm signalisiert wird, dass die Ergebnisse vollständig vorliegen.


Rheinwerk Computing - Zum Seitenanfang

32.2.4 Die Eigenschaft »CommandTimeout« des SqlCommand-ObjektsZur vorigen Überschrift

Wird eine Abfrage mit einer der vier Execute-Methoden ausgeführt, wartet das SqlCommand-Objekt per Vorgabe 30 Sekunden auf das Eintreffen der ersten Abfrageergebnisse. Das Überschreiten dieser Zeitspanne hat eine Ausnahme zur Folge.

Mit Hilfe der Eigenschaft CommandTimeout kann die Voreinstellung verändert werden. Mit der Einstellung 0 wartet das SqlCommand-Objekt eine unbegrenzte Zeit. Empfehlenswert ist das allerdings nicht. Eine Abfrage könnte durchaus so lange andauern, dass die voreingestellte Zeit überschritten wird. Das hat keine weiteren Auswirkungen, weil eine laufende Abfrage nicht unterbrochen wird.



Ihre Meinung

Wie hat Ihnen das Openbook gefallen? Wir freuen uns immer über Ihre Rückmeldung. Schreiben Sie uns gerne Ihr Feedback als E-Mail an kommunikation@rheinwerk-verlag.de.

<< zurück
  Zum Rheinwerk-Shop
Zum Rheinwerk-Shop: Visual C# 2012

Visual C# 2012
Jetzt Buch bestellen


 Ihre Meinung?
Wie hat Ihnen das Openbook gefallen?
Ihre Meinung

 Buchempfehlungen
Zum Rheinwerk-Shop: Professionell entwickeln mit Visual C# 2012






 Professionell
 entwickeln mit
 Visual C# 2012


Zum Rheinwerk-Shop: Windows Presentation Foundation






 Windows Presentation
 Foundation


Zum Rheinwerk-Shop: Schrödinger programmiert C++






 Schrödinger
 programmiert C++


Zum Rheinwerk-Shop: C++ Handbuch






 C++ Handbuch


Zum Rheinwerk-Shop: C/C++






 C/C++


 Lieferung
Versandkostenfrei bestellen in Deutschland, Österreich und der Schweiz
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.


Nutzungsbestimmungen | Datenschutz | Impressum

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

Cookie-Einstellungen ändern