Nuta
Dostęp do tej strony wymaga autoryzacji. Możesz spróbować się zalogować lub zmienić katalog.
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.
Zestaw danych jest kopią danych w pamięci. Jeśli zmodyfikujesz te dane, dobrym rozwiązaniem jest zapisanie tych zmian z powrotem w bazie danych. Można to zrobić na jeden z trzech sposobów:
Wywołując jedną z
Updatemetod klasy TableAdapterWywołując jedną z
DBDirectmetod klasy TableAdapterWywołując metodę
UpdateAllw TableAdapterManager, generowanym przez program Visual Studio, gdy zestaw danych zawiera tabele powiązane z innymi tabelami w zestawie danych
Gdy tabele zbioru danych są powiązane z kontrolkami na Formularzu systemu Windows lub stronie XAML, architektura powiązywania danych wykonuje całą pracę za Ciebie.
Jeśli znasz elementy TableAdapters, możesz przejść bezpośrednio do jednego z następujących tematów:
| Temat | Opis |
|---|---|
| Wstawianie nowych rekordów do bazy danych | Jak wykonywać aktualizacje i wstawiać przy użyciu obiektów TableAdapters lub Command |
| Aktualizowanie danych przy użyciu elementu TableAdapter | Jak wykonywać aktualizacje za pomocą elementów TableAdapters |
| Aktualizacja hierarchiczna | Jak wykonywać aktualizacje z zestawu danych z co najmniej dwiema powiązanymi tabelami |
| Obsługa wyjątku współbieżności | Jak obsługiwać wyjątki, gdy dwóch użytkowników próbuje zmienić te same dane w bazie danych w tym samym czasie |
| Instrukcje: zapisywanie danych przy użyciu transakcji | Jak zapisywać dane w transakcji przy użyciu systemu. Przestrzeń nazw transakcji i obiekt TransactionScope |
| Zapisywanie danych w transakcji | Przewodnik dotyczący tworzenia aplikacji Windows Forms do demonstracji zapisywania danych w bazie danych wewnątrz transakcji |
| Zapisywanie danych w bazie danych (wiele tabel) | Jak edytować rekordy i zapisywać zmiany w wielu tabelach z powrotem do bazy danych |
| Zapisywanie danych z obiektu w bazie danych | Jak przekazywać dane z obiektu, który nie znajduje się w zestawie danych do bazy danych przy użyciu metody TableAdapter DbDirect |
| Zapisywanie danych za pomocą metod TableAdapter DBDirect | Jak używać obiektu TableAdapter do wysyłania zapytań SQL bezpośrednio do bazy danych |
| Zapisywanie zestawu danych jako kodu XML | Jak zapisać zestaw danych w dokumencie XML |
Aktualizacje dwuetapowe
Aktualizowanie źródła danych jest procesem dwuetapowym. Pierwszym krokiem jest zaktualizowanie zestawu danych przy użyciu nowych rekordów, zmienionych rekordów lub usuniętych rekordów. Jeśli aplikacja nigdy nie wysyła tych zmian z powrotem do źródła danych, zakończysz pracę z aktualizacją.
Jeśli wyślesz zmiany z powrotem do bazy danych, wymagany jest drugi krok. Jeśli nie używasz kontrolek powiązanych z danymi, musisz ręcznie wywołać metodę Update tego samego TableAdaptera (lub adaptera danych), który został użyty do wypełnienia zestawu danych. Można jednak użyć różnych adapterów, na przykład, aby przenieść dane z jednego źródła danych do innego lub zaktualizować wiele źródeł danych. Jeśli nie używasz powiązania danych i zapisujesz zmiany dla powiązanych tabel, musisz ręcznie utworzyć wystąpienie zmiennej klasy wygenerowanej TableAdapterManager automatycznie, a następnie wywołać jej UpdateAll metodę.
Zestaw danych zawiera zbiory tabel, które zawierają zbiory wierszy. Jeśli zamierzasz później zaktualizować bazowe źródło danych, należy użyć metod we DataTable.DataRowCollection właściwości podczas dodawania lub usuwania wierszy. Te metody wykonują śledzenie zmian potrzebne do aktualizowania źródła danych. Jeśli wywołasz kolekcję RemoveAt na właściwości Rows, usunięcie nie zostanie przekazane z powrotem do bazy danych.
Scalanie zestawów danych
Zawartość zestawu danych można zaktualizować, scalając go z innym zestawem danych. Obejmuje to skopiowanie zawartości źródłowego zestawu danych do wywołującego zestawu danych (nazywanego docelowym zestawem danych). Podczas scalania zestawów danych nowe rekordy w źródłowym zestawie danych są dodawane do docelowego zestawu danych. Ponadto dodatkowe kolumny w źródłowym zestawie danych są dodawane do docelowego zestawu danych. Scalanie zestawów danych jest przydatne, gdy masz lokalny zestaw danych i otrzymujesz drugi zestaw danych z innej aplikacji. Jest to również przydatne w przypadku uzyskania drugiego zestawu danych z składnika, takiego jak usługa internetowa XML, lub gdy trzeba zintegrować dane z wielu zestawów danych.
Podczas scalania zestawów danych można użyć argumentu logicznego (preserveChanges), który informuje metodę Merge, czy ma zachować istniejące modyfikacje w docelowym zestawie danych. Ponieważ zestawy danych obsługują wiele wersji rekordów, należy pamiętać, że scala się więcej niż jedną wersję rekordów. W poniższej tabeli przedstawiono sposób scalania rekordu w dwóch zestawach danych:
| DataRowVersion | Docelowy zestaw danych | Zestaw danych źródłowych |
|---|---|---|
| Oryginał | James Wilson | James C. Wilson |
| Aktualny | Jim Wilson | James C. Wilson |
Wywołanie metody Merge na poprzedniej tabeli z preserveChanges=false targetDataset.Merge(sourceDataset) skutkuje następującymi danymi:
| DataRowVersion | Docelowy zestaw danych | Zestaw danych źródłowych |
|---|---|---|
| Oryginał | James C. Wilson | James C. Wilson |
| Aktualny | James C. Wilson | James C. Wilson |
Wywołanie metody Merge z parametrem preserveChanges = true targetDataset.Merge(sourceDataset, true) daje następujące dane:
| DataRowVersion | Docelowy zestaw danych | Zestaw danych źródłowych |
|---|---|---|
| Oryginał | James C. Wilson | James C. Wilson |
| Aktualny | Jim Wilson | James C. Wilson |
Ostrzeżenie
W scenariuszu preserveChanges = true, jeśli metoda RejectChanges jest wywoływana na rekordzie w zestawie danych docelowych, przywraca on oryginalne dane z zestawu danych źródłowego. Oznacza to, że jeśli spróbujesz zaktualizować oryginalne źródło danych przy użyciu docelowego zestawu danych, może nie być w stanie odnaleźć oryginalnego wiersza do zaktualizowania. Naruszenie współbieżności można zapobiec, wypełniając inny zestaw danych zaktualizowanymi rekordami ze źródła danych, a następnie wykonując scalanie, aby zapobiec naruszeniu współbieżności. (Naruszenie współbieżności występuje, gdy inny użytkownik modyfikuje rekord w źródle danych po wypełnieniu zestawu danych).
Aktualizowanie ograniczeń
Aby wprowadzić zmiany w istniejącym wierszu danych, dodaj lub zaktualizuj dane w poszczególnych kolumnach. Jeśli zestaw danych zawiera ograniczenia (takie jak klucze obce lub ograniczenia niepuste), możliwe jest, że rekord może być tymczasowo w stanie błędu podczas jego aktualizowania. Oznacza to, że może dojść do stanu błędu po zakończeniu procesu aktualizacji jednej kolumny, ale przed przejściem do następującej.
Aby zapobiec przedwczesnym naruszeniom ograniczeń, można tymczasowo zawiesić ograniczenia aktualizacji. Służy to dwóm celom:
Zapobiega to zgłaszaniu błędu po zakończeniu aktualizowania jednej kolumny, ale nie rozpoczęto jeszcze aktualizowania kolejnej kolumny.
Zapobiega to wywoływaniu niektórych zdarzeń aktualizacji (zdarzeń, które są często używane do walidacji).
Uwaga / Notatka
W formularzach Systemu Windows architektura powiązania danych wbudowana w usługę datagrid zawiesza sprawdzanie ograniczeń, dopóki fokus nie zostanie przeniesiony z wiersza i nie trzeba jawnie wywoływać BeginEditmetod , EndEditlub CancelEdit .
Ograniczenia są automatycznie wyłączone, gdy Merge metoda jest wywoływana w zestawie danych. Po zakończeniu scalania, jeśli istnieją jakiekolwiek ograniczenia dotyczące zestawu danych, których nie można włączyć, zgłaszany jest wyjątek ConstraintException. W takiej sytuacji właściwość EnforceConstraints jest ustawiona na false,, a wszystkie naruszenia ograniczeń muszą zostać rozwiązane przed zresetowaniem właściwości EnforceConstraints do true.
Po zakończeniu aktualizacji można ponownie włączyć sprawdzanie ograniczeń, co również aktywuje i wywołuje zdarzenia aktualizacji.
Aby uzyskać więcej informacji na temat zawieszania zdarzeń, zobacz Wyłączanie ograniczeń podczas wypełniania zestawu danych.
Błędy aktualizacji zestawu danych
Podczas aktualizowania rekordu w zestawie danych istnieje możliwość wystąpienia błędu. Na przykład możesz przypadkowo zapisywać dane nieprawidłowego typu w kolumnie lub dane, które są zbyt długie, albo dane, które mają inny problem z integralnością. Może też istnieć kontrola poprawności specyficzna dla aplikacji, która może zgłaszać błędy niestandardowe na dowolnym etapie zdarzenia aktualizacji. Aby uzyskać więcej informacji, zobacz Weryfikowanie danych w zestawach danych.
Utrzymywanie informacji o zmianach
Informacje o zmianach w zestawie danych są przechowywane na dwa sposoby: przez flagowanie wierszy, które wskazują, że zostały zmienione (RowState) i przez przechowywanie wielu kopii rekordu (DataRowVersion). Korzystając z tych informacji, procesy mogą określić, co zmieniło się w zestawie danych i wysyłać odpowiednie aktualizacje do źródła danych.
Właściwość RowState
Właściwość RowStateDataRow obiektu jest wartością, która zawiera informacje o stanie określonego wiersza danych.
W poniższej tabeli przedstawiono możliwe wartości DataRowState wyliczenia:
| Wartość DataRowState | Opis |
|---|---|
| Added | Wiersz został dodany jako element do elementu DataRowCollection. (Wiersz w tym stanie nie ma odpowiadającej oryginalnej wersji, ponieważ nie istniał w momencie ostatniego wywołania metody AcceptChanges). |
| Deleted | Wiersz został usunięty przy użyciu obiektu DataRowDelete. |
| Detached | Wiersz został utworzony, ale nie jest częścią żadnego DataRowCollection elementu. DataRow Obiekt jest w tym stanie natychmiast po jego utworzeniu, przed dodaniu go do kolekcji i po jego usunięciu z kolekcji. |
| Modified | Wartość kolumny w wierszu została zmodyfikowana. |
| Unchanged | Wiersz nie zmienił się od ostatniego wywołania AcceptChanges. |
DataRowVersion - wyliczenie
Zestawy danych obsługują wiele wersji rekordów. Pola DataRowVersion są używane podczas pobierania wartości znalezionej w DataRow za pomocą właściwości Item[] lub metody GetChildRows obiektu DataRow.
W poniższej tabeli przedstawiono możliwe wartości DataRowVersion wyliczenia:
| Wartość DataRowVersion | Opis |
|---|---|
| Current | Bieżąca wersja rekordu zawiera wszystkie modyfikacje, które zostały wykonane w rekordzie od czasu ostatniego AcceptChanges wywołania. Jeśli wiersz został usunięty, nie ma bieżącej wersji. |
| Default | Wartość domyślna rekordu zdefiniowana przez schemat zestawu danych lub źródło danych. |
| Original | Oryginalna wersja rekordu to kopia rekordu, ponieważ ostatni raz zmiany zostały zatwierdzone w zestawie danych. W praktyce jest to zazwyczaj wersja rekordu odczytywana ze źródła danych. |
| Proposed | Proponowana wersja rekordu, która jest dostępna tymczasowo w trakcie aktualizacji — czyli między wywołaniem metody BeginEdit a metody EndEdit. Zazwyczaj uzyskujesz dostęp do proponowanej wersji rekordu w programie obsługi dla zdarzenia takiego jak RowChanging. Wywołanie CancelEdit metody odwraca zmiany i usuwa proponowaną wersję wiersza danych. |
Oryginalne i bieżące wersje są przydatne podczas przesyłania informacji o aktualizacji do źródła danych. Zazwyczaj po wysłaniu aktualizacji do źródła danych nowe informacje dotyczące bazy danych są w bieżącej wersji rekordu. Informacje z oryginalnej wersji służą do lokalizowania rekordu do aktualizacji.
Na przykład w przypadku zmiany klucza podstawowego rekordu potrzebny jest sposób zlokalizowania poprawnego rekordu w źródle danych w celu zaktualizowania zmian. Jeśli nie istniała oryginalna wersja, rekord najprawdopodobniej zostanie dodany do źródła danych, co spowoduje nie tylko dodatkowy niechciany rekord, ale również taki, który jest niedokładny i nieaktualny. Dwie wersje są również używane w kontrolce współbieżności. Możesz porównać oryginalną wersję z rekordem w źródle danych, aby określić, czy rekord uległ zmianie od czasu załadowania go do zestawu danych.
Proponowana wersja jest przydatna, gdy trzeba przeprowadzić walidację przed rzeczywistym zatwierdzeniem zmian w zestawie danych.
Nawet jeśli zmieniono rekordy, nie zawsze istnieją oryginalne lub bieżące wersje danych. Po wstawieniu nowego wiersza do tabeli nie ma oryginalnej wersji, tylko bieżącej wersji. Podobnie, jeśli usuniesz wiersz, wywołując metodę tabeli Delete , istnieje oryginalna wersja, ale nie ma bieżącej wersji.
Możesz sprawdzić, czy istnieje określona wersja rekordu, wykonując zapytanie dotyczące metody wiersza HasVersion danych. Dostęp do jednej z wersji rekordu można uzyskać, przekazując DataRowVersion wartość wyliczenia jako opcjonalny argument podczas żądania wartości kolumny.
Pobierz zmienione rekordy
Często zdarza się, aby nie aktualizować każdego rekordu w zestawie danych. Na przykład użytkownik może pracować z kontrolką Windows Forms DataGridView , która wyświetla wiele rekordów. Jednak użytkownik może zaktualizować tylko kilka rekordów, usunąć jeden i wstawić nowy. Zestawy danych i tabele danych udostępniają metodę (GetChanges) dla zwracania tylko wierszy, które zostały zmodyfikowane.
Można tworzyć podzestawy zmienionych rekordów przy użyciu GetChanges metody tabeli danych (GetChanges) lub samego zestawu danych (GetChanges). Jeśli wywołasz metodę dla tabeli danych, zwraca ona kopię tabeli z tylko zmienionymi rekordami. Podobnie, jeśli wywołasz metodę w zestawie danych, otrzymasz nowy zestaw danych z tylko zmienionymi rekordami.
GetChanges program sam zwraca wszystkie zmienione rekordy. Natomiast przekazanie żądanego DataRowState jako parametru do metody GetChanges umożliwia określenie, który podzbiór zmienionych rekordów chcesz uzyskać: nowo dodane rekordy, rekordy oznaczone do usunięcia, odłączone rekordy lub zmodyfikowane rekordy.
Uzyskanie podzbioru zmienionych rekordów jest przydatne, gdy chcesz wysyłać rekordy do innego składnika do przetwarzania. Zamiast wysyłać cały zestaw danych, możesz zmniejszyć nakład pracy związany z komunikacją z innym składnikiem, uzyskując tylko rekordy wymagane przez składnik.
Zatwierdzanie zmian w zestawie danych
W miarę wprowadzania zmian w zestawie danych, właściwość RowState zmienionych wierszy jest ustawiana. Oryginalne i bieżące wersje rekordów są ustanawiane, utrzymywane i udostępniane przez RowVersion właściwość. Metadane przechowywane we właściwościach tych zmienionych wierszy są niezbędne do wysyłania poprawnych aktualizacji do źródła danych.
Jeśli zmiany odzwierciedlają bieżący stan źródła danych, nie trzeba już utrzymywać tych informacji. Zazwyczaj występuje dwa razy, gdy zestaw danych i jego źródło są zsynchronizowane:
Natychmiast po załadowaniu informacji do zestawu danych, na przykład podczas odczytywania danych ze źródła.
Po wysłaniu zmian z zestawu danych do źródła danych (ale nie wcześniej, ponieważ utracisz informacje o zmianie wymagane do wysyłania zmian do bazy danych).
Oczekujące zmiany w zestawie danych można zatwierdzić, wywołując metodę AcceptChanges . AcceptChanges Zazwyczaj jest wywoływana w następujących godzinach:
Po załadowaniu zestawu danych. Jeśli załadujesz zestaw danych przez wywołanie metody
Filladaptera TableAdapter, to adapter automatycznie zatwierdza zmiany za Ciebie. Jeśli jednak załadujesz zestaw danych przez scalenie z nim innego zestawu danych, musisz zatwierdzić zmiany ręcznie.Uwaga / Notatka
Możesz uniemożliwić adapterowi automatyczne zatwierdzanie zmian podczas wywoływania
Fillmetody przez ustawienieAcceptChangesDuringFillwłaściwości adaptera nafalse. Jeśli jest ustawiona wartośćfalse, dla RowState każdego wiersza wstawionego podczas wypełniania ustawiono wartość Added.Po wysłaniu zmian w zestawie danych do innego procesu, na przykład do usługi internetowej XML.
Ostrzeżenie
Zatwierdzanie zmiany w ten sposób powoduje usunięcie wszelkich informacji o zmianach. Nie zatwierdzaj zmian dopiero po zakończeniu wykonywania operacji, które wymagają, aby aplikacja wiedziała, jakie zmiany zostały wprowadzone w zestawie danych.
Ta metoda wykonuje następujące czynności:
Current Zapisuje wersję rekordu w jego Original wersji i zastępuje oryginalną wersję.
Usuwa dowolny wiersz, w którym właściwość jest ustawiona RowState na Deleted.
Metoda AcceptChanges jest dostępna na trzech poziomach. Można wywołać go na DataRow obiekcie, aby zatwierdzić zmiany tylko dla tego wiersza. Można również wywołać go w DataTable obiekcie, aby zatwierdzić wszystkie wiersze w tabeli. Na koniec można wywołać go na DataSet obiekcie, aby zatwierdzić wszystkie oczekujące zmiany we wszystkich rekordach wszystkich tabel zestawu danych.
W poniższej tabeli opisano, które zmiany są zatwierdzane w oparciu o obiekt wywoływany przez metodę:
| Metoda | Wynik |
|---|---|
| System.Data.DataRow.AcceptChanges | Zmiany są zatwierdzane tylko w określonym wierszu. |
| System.Data.DataTable.AcceptChanges | Zmiany są zatwierdzane we wszystkich wierszach w określonej tabeli. |
| System.Data.DataSet.AcceptChanges | Zmiany są zatwierdzane we wszystkich wierszach we wszystkich tabelach zestawu danych. |
Uwaga / Notatka
W przypadku ładowania zestawu danych przez wywołanie metody TableAdapter Fill nie trzeba jawnie akceptować zmian. Domyślnie Fill metoda wywołuje metodę AcceptChanges po zakończeniu wypełniania tabeli danych.
Powiązana metoda RejectChanges odwraca efekt zmian, kopiując Original wersję z powrotem do Current wersji rekordów. Również ustawia RowState każdego rekordu z powrotem na Unchanged.
Walidacja danych
Aby sprawdzić, czy dane w aplikacji spełniają wymagania procesów, do których są przekazywane, często trzeba dodać walidację. Może to obejmować sprawdzenie, czy wpis użytkownika w formularzu jest poprawny, weryfikowanie danych wysyłanych do aplikacji przez inną aplikację, a nawet sprawdzanie, czy informacje obliczane w składniku mieszczą się w ograniczeniach źródła danych i wymagań aplikacji.
Dane można zweryfikować na kilka sposobów:
W warstwie biznesowej przez dodanie kodu do aplikacji w celu zweryfikowania danych. Zestaw danych to jedno miejsce, w którym można to zrobić. Zestaw danych zapewnia niektóre zalety walidacji zaplecza — takie jak możliwość weryfikowania zmian w miarę zmieniania wartości kolumn i wierszy. Aby uzyskać więcej informacji, zobacz Weryfikowanie danych w zestawach danych.
W warstwie prezentacji przez dodanie walidacji do formularzy. Aby uzyskać więcej informacji, zobacz Walidacja danych wejściowych użytkownika w formularzach systemu Windows.
W zapleczu danych, wysyłając dane do źródła danych — na przykład bazę danych — i umożliwiając jej akceptowanie lub odrzucanie danych. Jeśli pracujesz z bazą danych, która ma zaawansowane funkcje sprawdzania poprawności danych i dostarczania informacji o błędach, może to być praktyczne podejście, ponieważ można zweryfikować dane niezależnie od tego, skąd pochodzą. Jednak takie podejście może nie spełniać wymagań weryfikacji specyficznych dla aplikacji. Ponadto posiadanie źródła danych walidującego dane może spowodować wiele rund komunikacji ze źródłem danych, w zależności od tego, w jaki sposób aplikacja ułatwia usuwanie błędów walidacji zgłaszanych przez back-end.
Ważne
Podczas używania poleceń danych, gdzie właściwość CommandType jest ustawiona na Text, należy dokładnie sprawdzić informacje wysyłane z klienta przed przekazaniem ich do bazy danych. Złośliwi użytkownicy mogą próbować wysłać (wstrzykiwać) zmodyfikowane lub dodatkowe instrukcje SQL w celu uzyskania nieautoryzowanego dostępu lub uszkodzenia bazy danych. Przed przeniesieniem danych wejściowych użytkownika do bazy danych należy zawsze sprawdzić, czy informacje są prawidłowe. Najlepszym rozwiązaniem jest zawsze używanie sparametryzowanych zapytań lub procedur składowanych, jeśli jest to możliwe.
Przesyłanie aktualizacji do źródła danych
Po wprowadzeniu zmian w zestawie danych można przesyłać zmiany do źródła danych. Najczęściej można to zrobić, wywołując metodę Update TableAdaptera (lub adaptera danych). Metoda przechodzi przez każdy rekord w tabeli danych, określa wymagany typ aktualizacji (aktualizacja, wstawianie lub usuwanie), jeśli istnieje, a następnie uruchamia odpowiednie polecenie.
Na ilustracji przedstawiającej sposób opracowywania aktualizacji załóżmy, że aplikacja używa zestawu danych zawierającego jedną tabelę danych. Aplikacja pobiera dwa wiersze z bazy danych. Po pobraniu tabela danych w pamięci wygląda następująco:
(RowState) CustomerID Name Status
(Unchanged) c200 Robert Lyon Good
(Unchanged) c400 Nancy Buchanan Pending
Twoja aplikacja zmienia stan Nancy Buchanan na "Preferowane". W wyniku tej zmiany wartość RowState właściwości tego wiersza zmienia się z Unchanged na Modified. Wartość RowState właściwości dla pierwszego wiersza pozostaje następująca Unchanged: . Tabela danych wygląda teraz następująco:
(RowState) CustomerID Name Status
(Unchanged) c200 Robert Lyon Good
(Modified) c400 Nancy Buchanan Preferred
Aplikacja wywołuje teraz metodę Update w celu przesłania zestawu danych do bazy danych. Metoda sprawdza po kolei każdy wiersz. W pierwszym wierszu metoda nie przesyła instrukcji SQL do bazy danych, ponieważ ten wiersz nie uległ zmianie, ponieważ został pierwotnie pobrany z bazy danych.
Jednak w drugim wierszu metoda Update automatycznie wywołuje właściwe polecenie danych i przesyła je do bazy danych. Określona składnia instrukcji SQL zależy od dialektu SQL obsługiwanego przez bazowy magazyn danych. Jednak następujące ogólne cechy przekazanej instrukcji SQL są godne uwagi:
Przesłana instrukcja SQL jest instrukcją
UPDATE. Adapter wie, że używa instrukcjiUPDATE, ponieważ wartość właściwości RowState to Modified.Przesłana instrukcja SQL zawiera klauzulę
WHERE, wskazującą, że obiektem docelowym instrukcjiUPDATEjest wiersz, gdzieCustomerID = 'c400'. Ta część instrukcjiSELECTodróżnia wiersz docelowy od wszystkich innych, ponieważCustomerIDjest kluczem głównym tabeli docelowej. Informacje dotycząceWHEREklauzuli pochodzą z oryginalnej wersji rekordu (DataRowVersion.Original), w przypadku zmiany wartości wymaganych do zidentyfikowania wiersza.Przesłana instrukcja SQL zawiera klauzulę
SET, aby ustawić nowe wartości zmodyfikowanych kolumn.Uwaga / Notatka
Jeśli właściwość TableAdaptera
UpdateCommandzostała ustawiona na nazwę procedury składowanej, adapter nie tworzy instrukcji SQL. Zamiast tego wywołuje procedurę składowaną z odpowiednimi przekazanymi parametrami.
Przekazywanie parametrów
Zazwyczaj używasz parametrów do przekazywania wartości rekordów, które mają zostać zaktualizowane w bazie danych. Gdy metoda TableAdapter Update uruchamia instrukcję UPDATE , musi wypełnić wartości parametrów. Pobiera te wartości z Parameters kolekcji dla odpowiedniego polecenia danych — w tym przypadku UpdateCommand obiekt w tabeli TableAdapter.
Jeśli użyto narzędzi programu Visual Studio do wygenerowania adaptera danych, obiekt UpdateCommand zawiera kolekcję parametrów odpowiadających każdemu symbolowi zastępczemu w instrukcji.
Właściwość System.Data.SqlClient.SqlParameter.SourceColumn każdego parametru wskazuje kolumnę w tabeli danych. Na przykład właściwość SourceColumn dla parametrów au_id i Original_au_id jest ustawiona na kolumnę w tabeli danych, która zawiera identyfikator autora. Gdy metoda adaptera Update jest uruchamiana, odczytuje identyfikator autora z rekordu, który jest aktualizowany, i przekazuje wartości do instrukcji.
W instrukcji UPDATE należy określić zarówno nowe wartości (te, które zostaną zapisane w rekordzie), jak i stare wartości (aby rekord mógł znajdować się w bazie danych). W związku z tym istnieją dwa parametry dla każdej wartości: jeden dla SET klauzuli i inny dla klauzuli WHERE . Oba parametry odczytują dane z rekordu, który jest aktualizowany, ale otrzymują różne wersje wartości kolumny na podstawie właściwości parametru SourceVersion . Parametr klauzuli SET pobiera bieżącą wersję, a parametr klauzuli WHERE pobiera oryginalną wersję.
Uwaga / Notatka
Wartości w kolekcji Parameters można również ustawić samodzielnie w kodzie, co zwykle robi się w procedurze obsługi zdarzeń dla zdarzenia adaptera danych RowChanging.
Treści powiązane
- Narzędzia zestawu danych w programie Visual Studio
- Tworzenie i konfigurowanie TableAdapters
- Aktualizowanie danych przy użyciu elementu TableAdapter
- wiązanie kontrolek z danymi w programie Visual Studio
- Weryfikowanie danych
- Instrukcje: dodawanie, modyfikowanie i usuwanie jednostek (usługi danych WCF)