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

Inhaltsverzeichnis
1 Einführung
2 Grundlagen der Sprachsyntax
3 Klassendesign
4 Weitere Datentypen
5 Multithreading
6 Collections und LINQ
7 Eingabe und Ausgabe
8 Anwendungen: Struktur und Installation
9 Code erstellen und debuggen
10 Einige Basisklassen
11 Windows-Anwendungen erstellen
12 Die wichtigsten Steuerelemente
13 Tastatur- und Mausereignisse
14 MDI-Anwendungen
15 Grafiken mit GDI+
16 Drucken
17 Entwickeln von Steuerelementen
18 Programmiertechniken
19 WPF – Grundlagen
20 Layoutcontainer
21 WPF-Steuerelemente
22 Konzepte von WPF
23 Datenbankverbindung mit ADO.NET
24 Datenbankabfragen mit ADO.NET
25 DataAdapter
26 Offline mit DataSet
27 Datenbanken aktualisieren
28 Stark typisierte DataSets
A Anhang: Einige Übersichten
Stichwort

Download:
- ZIP, ca. 12,3 MB
Buch bestellen
Ihre Meinung?

Spacer
<< zurück
Visual Basic 2008 von Andreas Kuehnel, Stephan Leibbrandt
Das umfassende Handbuch
Buch: Visual Basic 2008

Visual Basic 2008
3., aktualisierte und erweiterte Auflage, geb., mit DVD
1.323 S., 49,90 Euro
Galileo Computing
ISBN 978-3-8362-1171-0
Pfeil 27 Datenbanken aktualisieren
Pfeil 27.1 Aktualisieren mit CommandBuilder
Pfeil 27.1.1 Parallelitätskonflikt
Pfeil 27.1.2 Aktualisierungsbefehle des DbCommandBuilders
Pfeil 27.1.3 Aktualisierungsoptionen des DbCommandBuilders
Pfeil 27.1.4 Vor- und Nachteile des DbCommandBuilders
Pfeil 27.2 Manuell gesteuerte Aktualisierungen
Pfeil 27.2.1 Manuelles Aktualisieren mit dem DataAdapter
Pfeil 27.2.2 Aktualisieren mit ExecuteNonQuery
Pfeil 27.3 Benutzer über fehlgeschlagene Aktualisierungen informieren
Pfeil 27.4 Konfliktverursachende Datenzeilen bei der Datenbank abfragen
Pfeil 27.5 DataSet mit der Datenbank synchronisieren
Pfeil 27.5.1 UpdatedRowSource in DbCommand
Pfeil 27.6 Hierarchische Änderungen an die Datenbank übermitteln
Pfeil 27.6.1 Datenbank auslesen
Pfeil 27.6.2 Änderung
Pfeil 27.6.3 Bestellung einfügen
Pfeil 27.6.4 Bestelldetails einfügen
Pfeil 27.6.5 Wiederherstellen der Datenbank


Galileo Computing - Zum Seitenanfang

27.3 Benutzer über fehlgeschlagene Aktualisierungen informieren topZur vorigen Überschrift

Vielleicht sind Sie auf die Idee gekommen, mit dem Beispielprogramm ZuFuss einen Parallelitätskonflikt zu simulieren. Sie werden dann festgestellt haben, dass im Konfliktfall keine Ausnahme ausgelöst wird. Zudem werden auch alle nach dem Konfliktfall anstehenden Änderungen in der Datenbank vorgenommen.

Ganz anders operiert der DbDataAdapter, der die Zeilen einzeln an die Datenbank schickt. Im Konfliktfall löst er eine DBConcurrencyException aus. Die verbleibenden Änderungen werden nicht mehr an die Datenbank geschickt. So ist das Standardverhalten.

Die folgende Eigenschaft weist den DataAdapter an, nach einem Konflikt seine Aufgabe fortzusetzen und auch die verbleibenden Änderungen zu übermitteln.

da.ContinueUpdateOnError = True

Das hat weitreichende Konsequenzen, denn nun verursacht ein fehlgeschlagener Aktualisierungsversuch keine Ausnahme mehr. Stattdessen wird die Eigenschaft HasErrors des entsprechenden DataRow-Objekts auf True gesetzt, ebenso die gleichnamige Eigenschaft des DataSets und der DataTable. Eine DataRow hat auch eine Eigenschaft RowError. Diese enthält nach dem misslungenen Versuch eine Fehlermeldung.

Im folgenden Beispielcode wird der Einsatz der Eigenschaften ContinueUpdateOnError, HasErrors und RowError gezeigt. Das nötige Command-Objekt wird von der schon bekannten Methode CreateUpdateCommand generiert.

Für eine korrekte Arbeitsweise setzt das Beispiel voraus, dass die Products-Datenbank in ihrem Ursprungszustand ist. Zuerst werden die Daten von der Datenbank eingelesen. Eine Datenzeile wird in der Datenbank geändert, um einen Konflikt zu provozieren. Danach wird die gleiche Zeile lokal geändert und die Datenbank synchronisiert. Danach werden Fehler protokolliert.


'...\ADO\Aktualisierung\Konflikt

Option Strict On 
Imports System.Data.Common, System.Data.SqlClient 
Namespace ADO 
  Module Konflikt 
    Sub Test() 
      Dim con As DbConnection = New SqlConnection() 
      con.ConnectionString = "Data Source=(local);" & _ 
        "Initial Catalog=Northwind;Integrated Security=sspi" 
      Dim cmd As DbCommand = New SqlCommand() 
      cmd.CommandText = "SELECT ProductID, ProductName, " & _ 
        "UnitPrice, Discontinued FROM Products" 
      cmd.Connection = con 
      Dim ds As New DataSet() 
      Dim da As DbDataAdapter = New SqlDataAdapter() 
      da.SelectCommand = cmd 
      da.Fill(ds)

      ' Konflikt simulieren 
      cmd.CommandText = _ 
        "UPDATE Products SET ProductName='Tee' WHERE ProductID=1" 
      con.Open() : cmd.ExecuteNonQuery() : con.Close()

      ' Änderungen durchführen 
      ds.Tables(0).Select("ProductID=1")(0)("ProductName") = "Kräutertee" 
      da.UpdateCommand = CreateUpdateCommand(con) 
      da.ContinueUpdateOnError = True 
      da.Update(ds)

      ' auf Konflikte prüfen 
      If ds.HasErrors Then 
        For Each row As DataRow In ds.Tables(0).Rows 
          If row.HasErrors Then Console.WriteLine( _ 
            "ID: {0}, Fehler: {1}", row("ProductID"), row.RowError) 
        Next 
      Else 
        Console.WriteLine("Aktualisierung erfolgreich.") 
      End If 
      Console.ReadLine() 
    End Sub 
    Function CreateUpdateCommand(ByVal con As DbConnection) As DbCommand ... 
  End Module 
End Namespace

Nach dem Aufruf von Update auf den DataAdapter wird zuerst mit

If ds.HasErrors Then ...

getestet, ob überhaupt ein Konflikt im DataSet vorliegt. True signalisiert, dass irgendeine Datenzeilenaktualisierung fehlgeschlagen ist und dass wir alle Datenzeilen in der Tabelle des DataSets durchlaufen müssen, um die konfliktverursachenden Zeilen zu finden.

For Each row As DataRow In ds.Tables(0).Rows 
  If row.HasErrors Then ... 
Next

Jetzt können wir reagieren. Im einfachsten Fall lassen wir uns zumindest die ID des betreffenden Übeltäters ausgeben – so wie in diesem Beispiel. Sie können die Information natürlich auch dazu benutzen, dem Benutzer die Chance zu geben, die Konfliktursache zu beseitigen, denn der Verursacher ist ermittelt.



Ihr Kommentar

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






<< zurück
  Zum Katalog
Zum Katalog: Visual Basic 2008







Visual Basic 2008
Jetzt bestellen


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

 Tipp
Zum Katalog: Coding for Fun





 Coding for Fun


 Buchempfehlungen
Zum Katalog: Einstieg in Visual Basic 2008





 Einstieg in
 Visual Basic 2008


Zum Katalog: Einstieg in Visual C# 2008





 Einstieg in
 Visual C# 2008


Zum Katalog: Windows Presentation Foundation





 Windows Presentation
 Foundation


Zum Katalog: Einstieg in Visual C++ 2008





 Einstieg in
 Visual C++ 2008


Zum Katalog: Visual C# 2008





 Visual C# 2008


Zum Katalog: Videotraining - Visual C# 2008





 Videotraining -
 Visual C# 2008


Zum Katalog: Einstieg in PHP





 Einstieg in PHP


Zum Katalog: IT-Handbuch für Fachinformatiker





 IT-Handbuch für
 Fachinformatiker


 Shopping
Versandkostenfrei bestellen in Deutschland und Österreich
InfoInfo




Copyright © Galileo Press 2009
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.


[Galileo Computing]

Galileo Press, Rheinwerkallee 4, 53227 Bonn, Tel.: 0228.42150.0, Fax 0228.42150.77, info@galileo-press.de