Nuta
Dostęp do tej strony wymaga autoryzacji. Możesz spróbować zalogować się lub zmienić katalogi.
Dostęp do tej strony wymaga autoryzacji. Możesz spróbować zmienić katalogi.
Uwaga / Notatka
Klasy DataSet i powiązane klasy to starsze technologie .NET Framework z początku 2000 roku, które umożliwiają aplikacjom pracę z danymi w pamięci, gdy aplikacje są odłączone od bazy danych. Technologie te są szczególnie przydatne w przypadku aplikacji, które umożliwiają użytkownikom modyfikowanie danych i utrwalanie zmian w bazie danych. Mimo że zestawy danych są sprawdzoną pomyślną technologią, zalecaną metodą dla nowych aplikacji platformy .NET jest użycie platformy Entity Framework Core. Program Entity Framework zapewnia bardziej naturalny sposób pracy z danymi tabelarycznymi jako modelami obiektów i ma bardziej prosty interfejs programowania.
W tym artykule opisano sposób wykonywania zapytań i edytowania danych w tabelach w zestawach danych programu .NET Framework. Dane w tabelach danych można edytować podobnie jak w przypadku edytowania tabel w dowolnej bazie danych. W tabeli można wstawiać, aktualizować i usuwać rekordy. W formularzu powiązanym z danymi można określić, które pola są edytowalne przez użytkownika.
W takich przypadkach infrastruktura powiązania danych obsługuje wszystkie śledzenie zmian, dzięki czemu zmiany mogą być wysyłane z powrotem do bazy danych. Jeśli dane są edytowane programowo i chcesz wysłać zmiany z powrotem do bazy danych, należy użyć obiektów i metod, które wykonują śledzenie zmian.
Oprócz zmiany rzeczywistych danych można również wykonać zapytanie, DataTable aby zwrócić określone wiersze danych. Można na przykład wykonywać zapytania dotyczące poszczególnych wierszy, oryginalnych lub proponowanych wersji wierszy, wierszy, które uległy zmianie lub wierszy zawierających błędy.
Wymagania wstępne
Aby używać programu Visual Studio do wykonywania zapytań i edytowania danych w zestawach danych programu .NET Framework, potrzebne są następujące elementy:
- Obciążenia tworzenia aplikacji klasycznych platformy .NET oraz przechowywania i przetwarzania danych zainstalowane w programie Visual Studio. Aby uzyskać więcej informacji, zobacz Modyfikowanie programu Visual Studio.
- Utworzony projekt .NET Framework w języku C# lub Visual Basic (VB).
- Zestaw danych utworzony na podstawie bazy danych SQL Server Express LocalDB.
Edytowanie wierszy w zestawie danych
Aby edytować istniejący wiersz w obiekcie DataTable, należy zlokalizować DataRow , który chcesz edytować, a następnie przypisać zaktualizowane wartości do żądanych kolumn.
Jeśli nie znasz indeksu wiersza, który chcesz edytować, użyj FindBy metody do wyszukiwania według klucza podstawowego.
NorthwindDataSet.CustomersRow customersRow =
northwindDataSet1.Customers.FindByCustomerID("ALFKI");
customersRow.CompanyName = "Updated Company Name";
customersRow.City = "Seattle";
Gdy znasz indeks wiersza, możesz użyć go do uzyskiwania dostępu do wiersza i edytowania go.
northwindDataSet1.Customers[4].CompanyName = "Updated Company Name";
northwindDataSet1.Customers[4].City = "Seattle";
Wstawianie nowych wierszy do zestawu danych
Aplikacje korzystające z kontrolek powiązanych z danymi zwykle dodaj nowe rekordy przy użyciu przycisku Dodaj nowy w kontrolce BindingNavigator.
Możesz również dodać nowy rekord do zestawu danych, wywołując metodę NewRow na DataTable. Następnie dodaj wiersz do DataRow kolekcji (Rows).
NorthwindDataSet.CustomersRow newCustomersRow =
northwindDataSet1.Customers.NewCustomersRow();
newCustomersRow.CustomerID = "ALFKI";
newCustomersRow.CompanyName = "Alfreds Futterkiste";
northwindDataSet1.Customers.Rows.Add(newCustomersRow);
Usuwanie rekordów z tabeli danych
Obiekt DataRow można usunąć, wywołując metodę RemoveDataRowCollection, lub wywołując metodę Delete obiektu DataRow.
Metoda Remove usuwa wiersz z kolekcji. Jeśli aplikacja nie musi wysyłać aktualizacji z powrotem do źródła danych, możesz usunąć rekordy, bezpośrednio korzystając z kolekcji wierszy danych za pomocą polecenia Remove.
Natomiast metoda Delete nie usuwa DataRow, ale oznacza je do usunięcia. Rzeczywiste usunięcie następuje, gdy wywołasz metodę AcceptChanges. Można programowo sprawdzić, które wiersze są oznaczone do usunięcia przed ich usunięciem.
Aby zachować informacje wymagane przez zestaw danych do wysyłania aktualizacji do źródła danych, użyj Delete metody , aby usunąć element DataRow z tabeli danych. Jeśli Twoja aplikacja używa TableAdapter lub DataAdapter, metoda Update usuwa wiersze, które mają wartość RowState równą Deleted.
W poniższym przykładzie pokazano, jak wywołać metodę Delete , aby oznaczyć pierwszy wiersz w Customers tabeli jako usunięty:
Uwaga / Notatka
Jeśli uzyskasz właściwość count elementu DataRowCollection, wynikowa liczba zawiera rekordy oznaczone do usunięcia. Aby uzyskać dokładną liczbę rekordów, które nie zostały oznaczone do usunięcia, możesz przeprowadzić pętlę w kolekcji i przyjrzeć się RowState właściwościom każdego rekordu. Rekordy przeznaczone do usunięcia mają RowState o wartości Deleted. Alternatywnie możesz utworzyć widok danych zestawu danych, który filtruje na podstawie stanu wiersza i pobrać z niego właściwość count.
Określanie, czy istnieją zmienione wiersze
Po wprowadzeniu zmian w rekordach w zestawie danych informacje o tych zmianach są przechowywane do momentu ich zatwierdzenia. Zmiany są zatwierdzane podczas wywoływania metody AcceptChanges zestawu danych lub tabeli danych albo podczas wywoływania metody Update z TableAdapter lub adaptera danych.
Zmiany są śledzone na dwa sposoby w każdym wierszu danych:
Każdy wiersz danych zawiera informacje związane z jego RowState, na przykład Added, Modified, Deleted lub Unchanged.
Każdy zmieniony wiersz danych zawiera wiele wersji. Element DataRowVersion zawiera oryginalną wersję przed zmianami i bieżącą wersję po zmianach. Kiedy oczekuje zmiana i możesz odpowiedzieć na zdarzenie RowChanging, dostępna jest również trzecia proponowana wersja.
Aby sprawdzić zmienione wiersze, wywołaj HasChanges metodę zestawu danych. Metoda zwraca true , czy zmiany zostały wprowadzone w zestawie danych. Po określeniu, że zmiany istnieją, można wywołać GetChanges metodę obiektu DataSet lub DataTable, aby zwrócić zestaw zmienionych wierszy.
W poniższym przykładzie pokazano, jak sprawdzić wartość zwracaną przez metodę HasChanges, aby wykryć, czy w NorthwindDataset1 znajdują się jakiekolwiek zmienione wiersze.
if (northwindDataSet1.HasChanges())
{
// Changed rows were detected, add appropriate code.
}
else
{
// No changed rows were detected, add appropriate code.
}
Określanie typu zmian
Możesz sprawdzić, jaki typ zmian wprowadzono w zestawie danych, przekazując wartość z DataRowState wyliczenia do HasChanges metody .
W poniższym przykładzie pokazano, jak sprawdzić zestaw danych, NorthwindDataset1 aby określić, czy zostały dodane nowe wiersze.
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.
}
Lokalizowanie wierszy z błędami
Podczas pracy z poszczególnymi kolumnami i wierszami danych mogą wystąpić błędy. Możesz sprawdzić właściwość HasErrors, aby określić, czy błędy istnieją w DataSet, DataTable lub DataRow.
HasErrors Jeśli właściwość zestawu danych to true, iteruj przez kolekcje tabel, a następnie przez wiersze, aby znaleźć wiersze z błędami.
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.
}
}
}
}
}
}