Hinweis
Für den Zugriff auf diese Seite ist eine Autorisierung erforderlich. Sie können versuchen, sich anzumelden oder das Verzeichnis zu wechseln.
Für den Zugriff auf diese Seite ist eine Autorisierung erforderlich. Sie können versuchen, das Verzeichnis zu wechseln.
Hinweis
Die DataSet Klassen und verwandten Klassen sind ältere .NET Framework-Technologien aus den frühen 2000er Jahren, mit denen Anwendungen mit Daten im Arbeitsspeicher arbeiten können, während die Apps von der Datenbank getrennt sind. Die Technologien sind besonders nützlich für Apps, mit denen Benutzer Daten ändern und die Änderungen wieder in der Datenbank speichern können. Obwohl Datasets eine bewährte erfolgreiche Technologie sind, ist der empfohlene Ansatz für neue .NET-Anwendungen die Verwendung von Entity Framework Core. Entity Framework bietet eine natürlichere Möglichkeit zum Arbeiten mit tabellarischen Daten als Objektmodelle und verfügt über eine einfachere Programmierschnittstelle.
In diesem Artikel wird beschrieben, wie Sie Daten in Tabellen in .NET Framework-Datasets abfragen und bearbeiten. Sie können Daten in Datentabellen ähnlich bearbeiten, wie Sie die Tabellen in einer beliebigen Datenbank bearbeiten. Sie können Datensätze in die Tabelle einfügen, aktualisieren und löschen. In einem datengebundenen Formular können Sie angeben, welche Felder vom Benutzer bearbeitet werden können.
In diesen Fällen verarbeitet die Datenbindungsinfrastruktur alle Änderungsnachverfolgungen, sodass die Änderungen an die Datenbank zurückgesendet werden können. Wenn Sie Daten programmgesteuert bearbeiten und die Änderungen zurück an die Datenbank senden möchten, müssen Sie Objekte und Methoden verwenden, die die Änderungsnachverfolgung ausführen.
Zusätzlich zum Ändern der tatsächlichen Daten können Sie auch eine DataTable Abfrage durchführen, um bestimmte Datenzeilen zurückzugeben. Sie können z. B. einzelne Zeilen, originale oder vorgeschlagene Versionen von Zeilen, geänderten Zeilen oder Zeilen abfragen, die Fehler enthalten.
Voraussetzungen
Um Visual Studio zum Abfragen und Bearbeiten von Daten in .NET Framework-Datasets zu verwenden, benötigen Sie Folgendes:
- Die in Visual Studio installierten Workloads für .NET-Desktopentwicklung und Datenspeicherung und -verarbeitung. Weitere Informationen finden Sie unter Ändern von Visual Studio.
- Ein .NET Framework-Projekt (C# oder Visual Basic( VB) wurde erstellt.
- Ein Dataset, das aus einer SQL Server Express LocalDB-Datenbank erstellt wurde.
Bearbeiten von Zeilen in einem Dataset
Um eine vorhandene Zeile in einem DataTable zu bearbeiten, müssen Sie die gewünschte DataRow finden und dann die aktualisierten Werte den gewünschten Spalten zuweisen.
Wenn Sie den Index der Zeile, die Sie bearbeiten möchten, nicht kennen, verwenden Sie die FindBy Methode, um nach dem Primärschlüssel zu suchen.
NorthwindDataSet.CustomersRow customersRow =
northwindDataSet1.Customers.FindByCustomerID("ALFKI");
customersRow.CompanyName = "Updated Company Name";
customersRow.City = "Seattle";
Sobald Sie den Zeilenindex kennen, können Sie ihn verwenden, um auf die Zeile zuzugreifen und sie zu bearbeiten.
northwindDataSet1.Customers[4].CompanyName = "Updated Company Name";
northwindDataSet1.Customers[4].City = "Seattle";
Einfügen neuer Zeilen in ein Dataset
Anwendungen, die datengebundene Steuerelemente verwenden, fügen in der Regel neue Datensätze mithilfe der Schaltfläche " Neu hinzufügen " auf einem BindingNavigator-Steuerelement hinzu.
Sie können einem Dataset auch einen neuen Datensatz hinzufügen, indem Sie die NewRow Methode an der DataTable aufrufen. Fügen Sie dann die Zeile zur Sammlung DataRow (Rows) hinzu.
NorthwindDataSet.CustomersRow newCustomersRow =
northwindDataSet1.Customers.NewCustomersRow();
newCustomersRow.CustomerID = "ALFKI";
newCustomersRow.CompanyName = "Alfreds Futterkiste";
northwindDataSet1.Customers.Rows.Add(newCustomersRow);
Löschen von Datensätzen aus einer Datentabelle
Sie können eine DataRow löschen, indem Sie die Remove Methode des DataRowCollectionObjekts aufrufen oder die Delete Methode des DataRow Objekts aufrufen.
Die Remove Methode entfernt die Zeile aus der Auflistung. Wenn Ihre Anwendung keine Aktualisierungen an eine Datenquelle zurücksenden muss, können Sie Datensätze entfernen, indem Sie direkt auf die Datenzeilensammlung zugreifen.Remove
Umgekehrt entfernt die Delete-Methode die DataRow nicht tatsächlich, sondern markiert sie für das Löschen. Die eigentliche Entfernung erfolgt, wenn Sie die Methode AcceptChanges aufrufen. Sie können programmgesteuert überprüfen, welche Zeilen zum Entfernen markiert sind, bevor Sie sie tatsächlich löschen.
Um die Informationen beizubehalten, die das Dataset zum Senden von Aktualisierungen an die Datenquelle benötigt, verwenden Sie die Delete-Methode, um das DataRow aus der Datentabelle zu entfernen. Wenn Ihre Anwendung ein TableAdapter oder DataAdapter verwendet, löscht die Update-Methode Zeilen, die ein RowState von Deleted haben.
Das folgende Beispiel zeigt, wie die Delete Methode aufgerufen wird, um die erste Zeile in der Customers Tabelle als gelöscht zu markieren:
Hinweis
Wenn Sie die Count-Eigenschaft eines DataRowCollection abrufen, enthält die resultierende Anzahl Datensätze, die zum Löschen markiert sind. Um eine genaue Anzahl von Datensätzen zu erhalten, die nicht für das Löschen markiert sind, können Sie die Sammlung durchlaufen und die RowState Eigenschaft jedes Datensatzes betrachten. Zur Löschung markierte Datensätze haben ein RowState von Deleted. Alternativ können Sie eine Datenansicht eines Datasets erstellen, das basierend auf dem Zeilenzustand filtert und die Count-Eigenschaft daraus abrufen kann.
Bestimmen, ob geänderte Zeilen vorhanden sind
Wenn Sie Änderungen an Datensätzen in einem Dataset vornehmen, werden die Informationen über diese Änderungen gespeichert, bis Sie sie festschreiben. Sie übertragen die Änderungen, wenn Sie die AcceptChanges-Methode eines Datensatzes oder einer Datentabelle anfragen oder wenn Sie die Update-Methode eines TableAdapter oder Datenadapters anfragen.
Änderungen werden auf zwei Arten in jeder Datenzeile nachverfolgt:
Jede Datenzeile enthält Informationen im Zusammenhang mit dem zugehörigen RowState, z. B. Added, Modified, Deleted, oder Unchanged.
Jede geänderte Datenzeile enthält mehrere Versionen. Dies DataRowVersion umfasst die ursprüngliche Version vor Änderungen und die aktuelle Version nach Änderungen. Während eine Änderung aussteht und Sie auf das RowChanging Ereignis reagieren können, ist auch eine dritte vorgeschlagene Version verfügbar.
Rufen Sie die HasChanges Methode eines Datasets auf, um nach geänderten Zeilen zu suchen. Die Methode gibt zurück true , wenn Änderungen im Dataset vorgenommen wurden. Nachdem Sie festgestellt haben, dass Änderungen vorhanden sind, können Sie die GetChanges-Methode einer DataSet oder DataTable aufrufen, um eine Reihe von geänderten Zeilen zurückzugeben.
Das folgende Beispiel zeigt, wie Sie den Rückgabewert aus der Methode HasChanges überprüfen, um zu ermitteln, ob sich in NorthwindDataset1 geänderte Zeilen befinden.
if (northwindDataSet1.HasChanges())
{
// Changed rows were detected, add appropriate code.
}
else
{
// No changed rows were detected, add appropriate code.
}
Bestimmen des Typs von Änderungen
Sie können überprüfen, welche Art von Änderungen in einem Dataset vorgenommen wurden, indem Sie einen Wert aus der DataRowState Enumeration an die HasChanges Methode übergeben.
Das folgende Beispiel zeigt, wie Sie das NorthwindDataset1 Dataset überprüfen, um festzustellen, ob neue Zeilen hinzugefügt wurden.
if (northwindDataSet1.HasChanges(DataRowState.Added))
{
// New rows have been added to the dataset, add appropriate code.
}
else
{
// No new rows have been added to the dataset, add appropriate code.
}
Suchen von Zeilen mit Fehlern
Wenn Sie mit einzelnen Spalten und Datenzeilen arbeiten, treten möglicherweise Fehler auf. Sie können die HasErrors-Eigenschaft überprüfen, um festzustellen, ob Fehler in einem DataSet, DataTable oder DataRow vorliegen.
Wenn die HasErrors-Eigenschaft für das Dataset true ist, iterieren Sie durch die Tabellensammlungen und danach durch die Zeilen, um die Fehler zu finden.
private void FindErrors()
{
if (dataSet1.HasErrors)
{
foreach (DataTable table in dataSet1.Tables)
{
if (table.HasErrors)
{
foreach (DataRow row in table.Rows)
{
if (row.HasErrors)
{
// Process error here.
}
}
}
}
}
}