Freigeben über


Einführung in Dataset-Aktualisierungen

Da es sich bei einem Dataset tatsächlich um eine im Arbeitsspeicher zwischengespeicherte Kopie handelt, gibt es für das Schreiben von Informationen in die ursprüngliche Datenquelle und die Änderung von Daten im Dataset zwei völlig getrennte Verfahren.

Hinweis   In einigen Fällen ist die Verwendung eines Datasets überhaupt nicht erforderlich. Sie können Aktualisierungen auch direkt auf eine Datenquelle (in der Regel eine Datenbank) übertragen, indem Sie eine SQL-Anweisung oder gespeicherte Prozedur aufrufen und Aktualisierungsinformationen an die Anweisung bzw. Prozedur übergeben. Weitere Informationen zur direkten Kommunikation mit einer Datenquelle finden Sie unter Einführung in DataCommand-Objekte in Visual Studio.

Zweistufige Aktualisierungen

Die Aktualisierung einer Datenquelle über ein Dataset umfasst zwei Schritte. Im ersten Schritt wird das Dataset mit neuen Informationen, z. B. neuen, geänderten oder gelöschten Datensätzen, aktualisiert. Falls die Anwendung lediglich auf das Dataset beschränkt ist – beispielsweise, wenn das Dataset nach der Aktualisierung an eine andere Anwendung gesendet und dort weiter verarbeitet wird – ist die Aktualisierung hier abgeschlossen.

Hinweis   In Windows Forms werden Änderungen an datengebundenen Steuerelementen aufgrund der Datenbindungsarchitektur automatisch an das Dataset gesendet, so dass es nicht explizit mit eigenem Code aktualisiert werden muss. Weitere Informationen finden Sie unter Datenarchitektur in Windows Forms.

Wenn Sie eine Datenquelle (z. B. eine Datenbank) aktualisieren, besteht der zweite Schritt darin, die Änderungen am Dataset an die ursprüngliche Datenquelle zu senden. Dies bedeutet, dass bei der Aktualisierung des Datasets Änderungen nicht automatisch in eine zugrunde liegende Datenquelle fortgeschrieben werden. Vielmehr muss dieser zweite Schritt explizit ausgeführt werden. Normalerweise rufen Sie dazu die Update-Methode desselben Datenadapters auf, der zum Aufnehmen von Daten in das Dataset verwendet wurde. Sie können jedoch auch andere Adapter verwenden, beispielsweise solche zum Verschieben von Daten von einer Datenquelle in eine andere oder zum Aktualisieren mehrerer Datenquellen.

Zweistufiger Aktualisierungsprozess und die Bedeutung von "DataRowVersion" in einer erfolgreichen Aktualisierung

Weitere Informationen zur Übertragung von Dataset-Änderungen auf die Datenbank finden Sie unter Datenbankaktualisierungen mit Datasets.

Strukturell gesehen stellt ein Dataset Daten in Form von Auflistungsgruppen zur Verfügung. Datasets umfassen tabellarische Auflistungen. Tabellen bestehen wiederum aus Zeilengruppen. Tabellen werden als Auflistungen des Dataset-Objekts und Datensätze als Rows-Auflistung des DataTable-Objekts zur Verfügung gestellt. Auch wenn Sie Daten in einem Dataset ändern können, indem Sie diese Auflistungen mit Hilfe der grundlegenden Auflistungsmethoden bearbeiten, müssen Sie für die Aktualisierung einer zugrunde liegenden Datenquelle Methoden verwenden, die speziell für die Änderung von Datasets entwickelt wurden.

Um beispielsweise einen Datensatz aus einer Datentabelle zu entfernen, können Sie die RemoveAt-Methode der tabellenspezifischen Rows-Auflistung aufrufen. Bei dieser Vorgehensweise wird der Datensatz physisch aus dem Dataset gelöscht. Falls Sie das Dataset lediglich als strukturierten Datenspeicher verwenden und keine Änderungsinformationen auf eine andere Anwendung übertragen müssen, ist diese Bearbeitungsmethode für Auflistungsdaten eine akzeptable Möglichkeit, um ein Dataset zu aktualisieren.

Wenn Sie jedoch beabsichtigen, Änderungen auf eine Datenquelle oder eine andere Anwendung zu übertragen, müssen Änderungsinformationen (d. h. Metadaten) zu jeder Aktualisierung nachverfolgt werden. Wenn Sie später Änderungen an die Datenquelle oder Anwendung senden, verfügt der Prozess über die Informationen, die zum Auffinden und Aktualisieren der erforderlichen Datensätze nötig sind. Angenommen, Sie löschen einen Datensatz in einem Dataset. In diesem Fall müssen Informationen über den gelöschten Datensatz im Dataset verwaltet werden, so dass beim Aufrufen der DeleteCommand-Anweisung im Datenadapter genügend Verlaufsinformationen verfügbar sind, um den ursprünglichen Datensatz in der Datenquelle zu lokalisieren und zu löschen. Weitere Informationen finden Sie unten im Abschnitt "Verwalten von Änderungsinformationen". Weitere Informationen finden Sie unter Aktualisieren, Einfügen und Löschen von Datensätzen in einem Dataset.

Zusammenführen von Datasets

Sie können ein Dataset aktualisieren, indem Sie Inhalte zusammenführen. Dabei kopieren Sie den Inhalt eines Datasets (des so genannten Quell-Datasets) in das aufrufende Dataset (das so genannte Ziel-Dataset). Beim Zusammenführen von Datasets werden neue Datensätze aus dem Quell-Dataset in das Ziel-Dataset eingefügt. Darüber hinaus werden dem Ziel-Dataset zusätzliche Spalten aus dem Quell-Dataset hinzugefügt. Das Zusammenführen von Datasets ist besonders hilfreich, wenn Sie über ein lokales Dataset verfügen und ein zweites Dataset aus einer anderen Anwendung oder Komponente, z. B. einem XML-Webdienst, abrufen oder einfach Daten aus mehreren Datasets integrieren müssen.

Beim Zusammenführen von Datasets kann ein optionales Boolean-Argument (preserveChanges) übergeben werden. Durch dieses Argument kann die Merge-Methode feststellen, ob bestehende Änderungen im Ziel-Dataset beibehalten werden sollen. Da Datasets mehrere Datensatzversionen verwalten, darf nicht außer Acht gelassen werden, dass auch mehrere Datensatzversionen zusammengeführt werden. In der folgenden Tabelle sehen Sie Datensätze aus zwei Datasets, die zusammengeführt werden:

DataRowVersion Ziel-Dataset Quell-Dataset
Original James Wilson James C. Wilson
Current Jim Wilson James C. Wilson

Durch den Aufruf der Merge-Methode für die oben dargestellte Tabelle mit preserveChanges=false targetDataset.Merge(sourceDataset) erzielen Sie das folgende Ergebnis:

DataRowVersion Ziel-Dataset Quell-Dataset
Original James C. Wilson James C. Wilson
Current James C. Wilson James C. Wilson

Durch den Aufruf der Merge-Methode mit preserveChanges = true targetDataset.Merge(sourceDataset, true) erzielen Sie das folgende Ergebnis:

DataRowVersion Ziel-Dataset Quell-Dataset
Original James C. Wilson James C. Wilson
Current Jim Wilson James C. Wilson

Vorsicht   Wenn im Szenario preserveChanges=true die RejectChanges-Methode für einen Datensatz im Ziel-Dataset aufgerufen wird, werden die Daten auf die ursprünglichen Daten des Quell-Datasets zurückgesetzt. Wenn Sie also die ursprüngliche Datenquelle mit dem Ziel-Dataset aktualisieren, wird die ursprüngliche, zu aktualisierende Zeile u. U. nicht gefunden. Eine Parallelitätsverletzung (z. B., wenn ein anderer Benutzer einen Datensatz in der Datenquelle ändert, nachdem Daten in das Dataset eingelesen wurden) kann verhindert werden, indem die aktualisierten Datensätze aus der Datenquelle in ein anderes Dataset eingefügt und dann zusammengeführt werden. Weitere Informationen finden Sie unter Parallelitätssteuerung in ADO.NET und Zusammenführen von Datasets.

Einschränkungen bei der Aktualisierung

Um Änderungen an einer vorhandenen Datenzeile vorzunehmen, werden Daten in einzelnen Spalten hinzugefügt oder aktualisiert. Falls das Dataset Einschränkungen unterliegt (wie Fremdschlüssel oder nicht auf 0 setzbare Beschränkungen), kann sich ein Datensatz während der Aktualisierung vorübergehend in einem Fehlerzustand befinden. Dies gilt für den Zeitpunkt, nachdem Sie eine Spalte aktualisiert haben, aber noch nicht zur nächsten Spalte gewechselt sind.

Um vorzeitige Verletzungen dieser Einschränkungen zu vermeiden, können Sie sie vorübergehend außer Kraft setzen. Bei diesem Verfahren werden zwei Ziele verfolgt:

  • Es wird verhindert, dass ein Fehler ausgelöst wird, wenn Sie eine Spalte aktualisieren, bevor Sie zur nächsten wechseln.
  • Bestimmte (häufig für Überprüfungen verwendete) Aktualisierungsereignisse werden nicht ausgelöst.

Nachdem die Aktualisierung abgeschlossen ist, können Sie die Überprüfung von Einschränkungen wieder aktivieren, wodurch auch Aktualisierungsereignisse wieder aktiviert und ausgelöst werden.

Hinweis   In Windows Forms wird die Überprüfung von Einschränkungen durch die integrierte Datenbindungsarchitektur unterbunden, bis der Fokus auf eine andere Zeile übergeht. Daher müssen die Methoden BeginEdit, EndEdit oder CancelEdit nicht explizit aufgerufen werden.

Beim Aufruf der Merge-Methode für ein Dataset werden Einschränkungen automatisch deaktiviert. Wenn nach erfolgreicher Zusammenführung weiterhin Einschränkungen für das Dataset bestehen, die nicht aufgelöst werden können, wird eine ConstraintException-Ausnahme ausgelöst. In diesem Fall wird die EnforceConstraints-Eigenschaft auf false gesetzt, und alle Einschränkungsverletzungen müssen aufgelöst werden, bevor die EnforceConstraints-Eigenschaft wieder auf true gesetzt werden kann.

Nachdem die Aktualisierung abgeschlossen ist, können Sie die Überprüfung von Einschränkungen wieder aktivieren, wodurch auch Aktualisierungsereignisse wieder aktiviert und ausgelöst werden.

Weitere Informationen, wie Sie das Auslösen von Ereignissen verhindern, finden Sie unter Unterbrechen von Aktualisierungseinschränkungen. Weitere Informationen über Ereignisse finden Sie unter Datenaktualisierungsereignisse.

Fehler bei der Dataset-Aktualisierung

Bei der Aktualisierung von Datensätzen in einen Dataset können Fehler auftreten. Beispielsweise können versehentlich Daten in eine Spalte geschrieben werden, die über den falschen Datentyp verfügt, zu lang ist oder ein anderes Integritätsproblem verursacht. Darüber hinaus werden u. U. anwendungsspezifische Gültigkeitsprüfungen durchgeführt, die in jeder Phase eines Aktualisierungsereignisses benutzerdefinierte Fehler auslösen können. Weitere Informationen finden Sie unter Datenüberprüfung in Datasets.

Verwalten von Änderungsinformationen

Informationen über Änderungen in einem Dataset werden auf zweifache Weise verwaltet: durch eine Zeilenkennzeichnung, die angibt, ob die Zeile geändert wurde (RowState), und durch die Speicherung mehrerer Kopien eines Datensatzes (DataRowVersion). Mit Hilfe dieser Informationen können die geänderten Daten im Dataset vom Prozess ermittelt und die entsprechenden Aktualisierungen an die Datenquelle gesendet werden.

RowState-Eigenschaft

Die RowState-Eigenschaft eines DataRow-Objekts stellt einen Wert dar, der Informationen über den Status einer bestimmten Datenzeile liefert.

In der folgenden Tabelle sind die möglichen Werte für die DataRowState-Enumeration aufgeführt:

DataRowState-Wert Beschreibung
Added Die Zeile wurde einer DataRowCollection als Element hinzugefügt. (Eine Zeile mit diesem Status hat keine entsprechende ursprüngliche Version, da sie beim Aufruf der letzten AcceptChanges-Methode noch nicht vorhanden war).
Deleted Die Zeile wurde mit der DataRow.Delete-Methode eines DataRow-Objekts gelöscht.
Detached Die Zeile wurde zwar erstellt, gehört aber keiner DataRowCollection an. Ein DataRow-Objekt befindet sich unmittelbar nach seiner Erstellung und bevor es einer Auflistung hinzugefügt wird oder nachdem es aus einer Auflistung entfernt wurde in diesem Zustand.
Modified Ein Spaltenwert in der Zeile wurde beliebig geändert.
Unchanged Die Zeile wurde seit dem letzten Aufruf von AcceptChanges nicht geändert.

DataRowVersion-Enumeration

In Datasets werden mehrere Datensatzversionen verwaltet. Die DataRowVersion-Enumeration eines DataRow-Objekts stellt einen Wert dar, der zur Rückgabe einer spezifischen Version eines DataRow-Objekts verwendet werden kann.

In der folgenden Tabelle sind die möglichen Werte für die DataRowVersion-Enumeration aufgeführt:

DataRowVersion-Wert Beschreibung
Current Die aktuelle Version eines Datensatzes enthält alle Änderungen, die seit dem letzten Aufruf von AcceptChanges am Datensatz vorgenommen wurden. Falls die Zeile gelöscht wurde, ist keine aktuelle Version vorhanden.
Default Der Standardwert eines Datensatzes, wie er durch das Dataset-Schema oder die Datenquelle definiert wurde.
Original Die ursprüngliche Version eines Datensatzes ist eine Kopie des Datensatzes zu dem Zeitpunkt, zu dem zuletzt ein Commit für Dataset-Änderungen ausgeführt wurde. Praktisch entspricht dies meist der Version eines Datensatzes, die aus einer Datenquelle gelesen wurde.
Proposed Die vorläufige Version eines Datensatzes ist während der laufenden Aktualisierung vorübergehend verfügbar, d. h. nach dem Aufruf der BeginEdit-Methode und vor dem Aufruf der EndEdit-Methode. Auf die vorläufige Version eines Datensatzes greifen Sie normalerweise in einem Ereignishandler, wie RowChanging, zu. Durch den Aufruf der CancelEdit-Methode werden die Änderungen rückgängig gemacht und die vorläufige Version aus der Datenzeile gelöscht.

Die ursprüngliche und die aktuelle Version sind hilfreich, wenn Aktualisierungsinformationen an eine Datenquelle übertragen werden. Wenn eine Aktualisierung an die Datenquelle gesendet wird, befinden sich die neuen Informationen für die Datenbank normalerweise in der aktuellen Version eines Datensatzes, und die Informationen aus der ursprünglichen Version werden verwendet, um den zu aktualisierenden Datensatz zu finden. Wenn der Primärschlüssel eines Datensatzes beispielsweise geändert wird, müssen Sie eine Möglichkeit haben, den richtigen Datensatz in der Datenquelle aufzufinden, damit die Daten entsprechend den Änderungen aktualisiert werden können. Wäre keine ursprüngliche Version vorhanden, würde der Datensatz höchstwahrscheinlich an die Datenquelle angefügt werden. Daraus würde dann nicht nur ein ungewollter zusätzlicher, sondern auch ungenauer und nicht mehr aktueller Datensatz resultieren. Die beiden Versionen werden außerdem in der Parallelitätssteuerung verwendet. Sie können die ursprüngliche Version mit einem Datensatz in der Datenquelle vergleichen, um festzustellen, ob der Datensatz geändert wurde, seitdem er zuletzt in das Dataset geladen wurde. Weitere Informationen finden Sie unter Parallelitätssteuerung in ADO.NET.

Die vorläufige Version ist von Nutzen, wenn Sie eine Gültigkeitsprüfung durchführen müssen, bevor die Änderungen am Dataset endgültig bestätigt werden.

Selbst wenn Datensätze geändert wurden, ist nicht immer eine ursprüngliche oder aktuelle Version der betreffenden Zeile verfügbar. Wenn Sie eine neue Zeile in die Tabelle einfügen, existiert keine ursprüngliche, sondern nur eine aktuelle Version. Auch wenn Sie eine Zeile durch den Aufruf der tabellenspezifischen Delete-Methode löschen, existiert eine ursprüngliche, aber keine aktuelle Version.

Um zu prüfen, ob eine bestimmte Datensatzversion vorhanden ist, fragen Sie die HasVersion-Eigenschaft der Datenzeile ab. Um auf eine der verschiedenen Datensatzversionen zuzugreifen, übergeben Sie einen DataRowVersion-Enumerationswert als optionales Argument, wenn Sie den Wert einer Spalte anfordern.

Abrufen geänderter Datensätze

In der Regel wird nicht jeder Datensatz in einem Dataset aktualisiert. Beispielsweise kann ein Benutzer mit einem DataGrid-Steuerelement von Windows Forms arbeiten, durch das zahlreiche Datensätze angezeigt werden. Der Benutzer aktualisiert jedoch vielleicht nur einige wenige Datensätze, löscht einen Datensatz und fügt einen neuen ein. Datasets und Datentabellen bieten eine Methode (GetChanges), mit deren Hilfe ausschließlich die geänderten Zeilen zurückgegeben werden können.

Sie können Teilmengen der geänderten Datensätze erstellen, indem Sie entweder die GetChanges-Methode der Datentabelle (DataTable.GetChanges) oder des Datasets selbst (DataSet.GetChanges) verwenden. Wenn Sie die Methode für die Datentabelle aufrufen, wird eine Kopie der Tabelle zurückgegeben, die lediglich die geänderten Datensätze enthält. Beim Aufrufen der Methode für das Dataset, erhalten Sie entsprechend ein neues Dataset, das ausschließlich die geänderten Datensätze umfasst. Durch GetChanges ohne Parameter werden alle geänderten Datensätze zurückgegeben. Wenn Sie jedoch den gewünschten DataRowState als Parameter an die GetChanges-Methode übergeben, können Sie die benötigte Teilmenge der geänderten Datensätze angeben: neu hinzugefügte Datensätze, zum Löschen gekennzeichnete Datensätze, getrennte oder geänderte Datensätze.

Eine Teilmenge der geänderten Datensätze abzurufen, ist besonders hilfreich, wenn Datensätze zur Verarbeitung an eine andere Komponente gesendet werden sollen. Anstatt das gesamte Dataset zu übertragen, können Sie die Kommunikation mit der anderen Komponente gering halten, indem Sie lediglich die Datensätze abrufen, die von der Komponente benötigt werden. Weitere Informationen finden Sie unter Abrufen von geänderten Zeilen.

Ausführen eines Commit für Änderungen in einem Dataset

Während Sie Änderungen im Dataset vornehmen, wird die RowState-Eigenschaft der geänderten Zeilen festgelegt. Die ursprünglichen und aktuellen Datensatzversionen werden über die RowVersion-Eigenschaft eingerichtet, verwaltet und zur Verfügung gestellt. Diese Eigenschaften stellen Änderungen dar. Die in den Eigenschaften gespeicherten Metadaten sind erforderlich, um die richtigen Aktualisierungen an die Datenquelle zu senden.

Wenn die Änderungen den aktuellen Zustand der Datenquelle widerspiegeln, müssen diese Informationen nicht länger beibehalten werden. Es gibt in der Regel zwei Situationen, in denen das Dataset und seine Quelle synchron sind:

  • Unmittelbar nach dem Laden von Informationen in das Dataset, z. B., wenn Sie Daten aus der Quelle einlesen.
  • Nachdem Änderungen vom Dataset an die Datenquelle gesendet wurden (jedoch nicht vorher, da die Änderungsinformationen, die zum Übertragen der Änderungen an die Datenbank erforderlich sind, ansonsten verloren gehen würden).

Sie können für die ausstehenden Änderungen im Dataset ein Commit ausführen, indem Sie die AcceptChanges-Methode aufrufen. AcceptChanges wird normalerweise in den folgenden Situationen in der Anwendung aufgerufen.

  • Nachdem das Dataset geladen wurde. Wenn Sie ein Dataset laden, indem Sie die Fill-Methode eines Datenadapters aufrufen, wird vom Datenadapter automatisch ein Commit für die Änderungen ausgeführt. Wird ein Dataset jedoch geladen, indem Sie ein anderes Dataset mit ihm zusammenführen, müssen Sie den Commit für die Änderungen manuell ausführen.

    Hinweis   Sie können verhindern, dass der Datenadapter beim Aufrufen der Fill-Methode den Commit für Änderungen automatisch ausführt, indem Sie die AcceptChangesDuringFill-Eigenschaft des Adapters auf false setzen. Lautet die Einstellung false, wird der RowState jeder Zeile, die mit der Fill-Methode eingefügt wird, auf Added gesetzt.

  • Nachdem Datasetänderungen an einen anderen Prozess, z. B. an einen XML-Webdienst, gesendet wurden.

    Vorsicht   Wenn ein Commit für Änderungen auf diese Weise ausgeführt wird, werden sämtliche Änderungsinformationen gelöscht. Der Commit für Änderungen sollte erst ausgeführt werden, nachdem alle Operationen abgeschlossen sind, bei denen für die Anwendung erkennbar sein muss, welche Änderungen im Dataset vorgenommen wurden.

Diese Methode umfasst folgende Schritte:

  • Die Current-Version eines Datensatzes wird in seine Original-Version geschrieben, wobei die ursprüngliche Version überschrieben wird.
  • Alle Zeilen, deren RowState-Eigenschaft auf Deleted gesetzt ist, werden gelöscht.
  • Die RowState-Eigenschaft eines Datensatzes wird auf Unchanged gesetzt.

Die AcceptChanges-Methode ist auf drei Ebenen verfügbar. Sie kann für ein DataRow-Objekt aufgerufen werden, wobei der für Änderungen ausgeführte Commit nur diese Zeile betrifft. Sie können die Methode auch für ein DataTable-Objekt aufrufen, um einen Commit für alle Zeilen in einer Tabelle auszuführen, oder für das Dataset-Objekt, um einen Commit für alle ausstehenden Änderungen in sämtlichen Datensätzen aller im Dataset enthaltenen Tabellen auszuführen.

In der folgenden Tabelle wird basierend auf dem Objekt, für das die Methode aufgerufen wird, beschrieben, für welche Änderungen ein Commit ausgeführt wird.

Methode Ergebnis
DataRow.AcceptChanges Ein Commit wird nur für Änderungen in der spezifischen Zeile ausgeführt.
DataTable.AcceptChanges Ein Commit wird für Änderungen in allen Zeilen der spezifischen Tabelle ausgeführt.
DataSet.AcceptChanges Ein Commit wird für Änderungen in allen Zeilen der Datasettabellen ausgeführt.

Hinweis   Wenn Sie ein Dataset laden, indem Sie die Fill-Methode eines Datenadapters aufrufen, müssen Änderungen nicht explizit angenommen werden; die Fill-Methode ruft standardmäßig die AcceptChanges-Methode auf, nachdem die Datentabelle mit Daten gefüllt wurde.

Durch eine verwandte Methode, RejectChanges, werden Änderungen rückgängig gemacht, indem die Original-Version zurück in die Current-Datensatzversion kopiert und die RowState-Eigenschaft aller Datensätze wieder auf Unchanged gesetzt wird.

Datenüberprüfung

Um sicherzustellen, dass die in der Anwendung enthaltenen Daten die Anforderungen des Prozesses erfüllen, an den sie übergeben werden, sind oftmals Gültigkeitsprüfungen erforderlich. Dabei wird z. B. überprüft, ob die Benutzereingaben in einem Formular oder die von einer anderen Anwendung an Ihre Anwendung gesendeten Daten korrekt sind, oder es kann sogar getestet werden, ob die innerhalb der Komponente berechneten Informationen die Einschränkungen der Datenquelle sowie die Anforderungen der Anwendung erfüllen.

Daten können auf verschiedene Weisen überprüft werden:

  • In der Präsentationsschicht, indem Formularen Gültigkeitsprüfungen hinzugefügt werden. Beim Arbeiten mit Web Forms-Seiten können zu diesem Zweck Überprüfungssteuerelemente hinzugefügt werden. Weitere Informationen finden Sie unter Einführung in die Überprüfung der Benutzereingabe in Web Forms. Bei Verwendung von Windows Forms verknüpfen Sie Gültigkeitsprüfungen normalerweise mit den Steuerelementen TextBox oder RichTextBox. Das MaskedEdit-Steuerelement bietet eine weitere Möglichkeit, die Gültigkeit von Benutzereingaben zu kontrollieren.

  • Im Back-End der Datenschicht. Daten werden an die Datenquelle, z. B. die Datenbank, gesendet, und die Datenbank kann diese Daten annehmen oder ablehnen. Bei Verwendung einer Datenbank, die hochentwickelte Datenüberprüfungsmechanismen besitzt und Fehlerinformationen bereitstellt, ist dieser Ansatz durchaus überlegenswert, da Daten unabhängig von ihrer Herkunft überprüft werden können. Möglicherweise werden dabei jedoch keine anwendungsspezifischen Anforderungen in Bezug auf die Gültigkeitsprüfung berücksichtigt. Darüber hinaus können aus der Datenüberprüfung durch die Datenquelle zahlreiche wiederholte Zugriffe auf die Datenquelle resultieren. Dies hängt davon ab, wie die vom Back-End ausgelösten Überprüfungsfehler von der Anwendung behandelt werden.

    Sicherheitshinweis   Wenn Sie Datenbefehle mit einer CommandType-Eigenschaft mit dem Wert Text verwenden, müssen Sie die von einem Client gesendeten Informationen sorgfältig überprüfen, bevor Sie diese an die Datenbank übergeben. Böswillige Benutzer könnten versuchen, veränderte oder zusätzliche SQL-Anweisungen zu senden (einzufügen), um unautorisierten Zugriff zu erhalten oder die Datenbank zu beschädigen. Bevor Sie Benutzereingaben an eine Datenbank übergeben, müssen Sie immer die Zulässigkeit der Informationen überprüfen. Es wird empfohlen, möglichst immer parametrisierte Abfragen oder gespeicherte Prozeduren zu verwenden. Weitere Informationen finden Sie unter Skriptangriffe.

  • In der Geschäftsschicht, indem der Anwendung Code für Datenüberprüfungen hinzugefügt wird. Das Dataset ist für diese Art von Überprüfung gut geeignet. Es vereint einige Vorteile der Back-End-Überprüfung, z. B. die Fähigkeit, Datenänderungen unabhängig von ihrer Implementierungsweise zu überprüfen, mit der Fähigkeit, anwendungsspezifische Überprüfungen durchzuführen. Weitere Informationen finden Sie unter Datenüberprüfung in Datasets.

Siehe auch

Dataset-Aktualisierungen in Visual Studio Net | Einführung in DataCommand-Objekte in Visual Studio | Datenarchitektur in Windows Forms | Datenbankaktualisierungen mit Datasets | Aktualisieren, Einfügen und Löschen von Datensätzen in einem Dataset | Zusammenführen von Datasets | Parallelitätssteuerung in ADO.NET | Unterbrechen von Aktualisierungseinschränkungen | Abrufen von geänderten Zeilen