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 35 ADO.NET – Aktualisieren der Datenbank
Pfeil 35.1 Aktualisieren mit dem »CommandBuilder«
Pfeil 35.1.1 Die von »SqlCommandBuilder« generierten Aktualisierungsstatements
Pfeil 35.1.2 Konfliktsteuerung in einer Mehrbenutzerumgebung
Pfeil 35.1.3 Die Eigenschaft »ConflictOption« des »SqlCommandBuilders«
Pfeil 35.1.4 Die Eigenschaft »SetAllValues«
Pfeil 35.2 Manuell gesteuerte Aktualisierung
Pfeil 35.2.1 Eigene Aktualisierungslogik
Pfeil 35.2.2 Das Beispielprogramm
Pfeil 35.3 Konfliktanalyse
Pfeil 35.3.1 Den Benutzer über fehlgeschlagene Aktualisierungen informieren
Pfeil 35.3.2 Konfliktverursachende Datenzeilen bei der Datenbank abfragen
Pfeil 35.4 Neue Autoinkrementwerte abrufen

Galileo Computing - Zum Seitenanfang

35.4 Neue Autoinkrementwerte abrufen

Fügen Sie der Tabelle Products eine neue Datenzeile hinzu, wird ein Primärschlüsselwert generiert, der automatisch von der Datenbank erzeugt wird. Nicht alle Datenbanken unterstützen dieses Feature, aber der SQL Server gehört dazu. Das Problem bei der Aktualisierung durch Hinzufügen einer neuen Datenzeile ist, dass der DataRow im DataSet nach der Aktualisierung der von der Datenbank erzeugte Primärschlüssel nicht zur Verfügung steht, während jede andere Aktualisierung dazu führt, dass die DataRowVersion.Original den Wert von DataRowVersion.Current annimmt.

Wie also erhalten wir nach dem Hinzufügen den neuen, aktuellen Primärschlüssel einer Autoinkrementspalte? Hier hilft uns der SQL Server mit seiner integrierten Funktion @@IDENTITY. Sie liefert den letzten erzeugten Autoinkrementwert zurück.

Wir können das Beispiel aus dem letzten Abschnitt nun in der Weise ergänzen, dass wir für unsere beiden hinzuzufügenden Datenzeilen die entsprechenden Werte im Ereignishandler zu RowUpdated abfragen und der Spalte ProduktID der betreffenden Datenzeile zuordnen.

static void da_RowUpdated(object sender, SqlRowUpdatedEventArgs e) {

// Konfliktanalyse

if (e.Status == UpdateStatus.ErrorsOccurred) {
[...]
}

// Abfrage der neuen Autoinkrementwerte

else if ((e.Status == UpdateStatus.Continue) &&
(e.StatementType == StatementType.Insert)) {
SqlCommand cmdPS = new SqlCommand();
cmdPS.CommandText = "SELECT @ProductID = @@IDENTITY";
cmdPS.Connection = con;
SqlParameter param = cmdPS.Parameters.Add("@ProductID", SqlDbType.Int);
param.Direction = ParameterDirection.Output;
cmdPS.ExecuteNonQuery();
e.Row["ProductID"] = cmdPS.Parameters["@ProductID"].Value;
}
}

Listing 35.9 Abfrage der neuen Primärschlüsselwerte

Zunächst muss sichergestellt werden, dass nur die erfolgreiche Aktualisierung einer neu hinzugefügten Datenzeile vom folgenden Code behandelt wird. Die Eigenschaften Status und StatementType des EventsArgs-Objekts gestatten uns eine entsprechende Filterung.

Im Anweisungsblock wird zuerst ein SqlCommand-Objekt erzeugt. Der CommandText-Eigenschaft weisen wir mit

SELECT @ProductID = @@IDENTITY

den Rückgabewert von @@IDENTITY zu. Der Parameter @ProductID muss als Ausgabeparameter festgelegt werden. Nach dem Aufruf der Methode ExecuteNonQuery können wir dem Parameter den neuen Wert entnehmen und ihn in die Spalte ProductID der entsprechenden Datenzeile schreiben. Bevor Sie die Anwendung testen, müssen Sie noch berücksichtigen, dass aufgrund des Aufrufs von FillSchema die Spalte ProductID schreibgeschützt ist. Sie müssen deshalb mit

ds.Tables[0].Columns["ProductID"].ReadOnly = false;

vor dem Aufruf der Update-Methode des SqlDataAdapters den Schreibschutz wieder aufheben.

Das komplette Beispiel finden Sie auf der Buch-DVD unter ...\Beispiele\Kapitel 35\AutoInkrementSample.



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