Zapisywanie danych w zestawach danych
Zapisywanie danych jest proces utrwalanie zmienione dane w aplikacji powrót do oryginalnego magazynu danych, zazwyczaj relacyjnej bazy danych, takich jak SQL Server.
Ponieważ zestawu danych jest faktycznie pamięci podręcznej — w pamięci kopię — danych, proces zapisywania informacji w oryginalnym źródle danych różni się od proces modyfikowania danych w zestawie danych.Można wysyłać zaktualizowane dane w zestawach danych do bazy danych, wywołując jedną z Update TableAdapter lub wywołując jedną z metod DBDirect TableAdapter.
Aby uzyskać więcej informacji dotyczących wysyłania zmiany w zestawie danych do bazy danych, zobacz Porady: aktualizowanie danych za pomocą TableAdapter i Porady: zapisywanie zmian w zestawie danych w bazie danych.
Visual Studio zawiera TableAdapterManager składnik, który pomaga w wykonywaniu zapisuje podczas zapisywania danych w tabelach pokrewnych.Ten składnik zapewnia, że zapisywane są wykonywane w odpowiedniej kolejności na podstawie ograniczeń klucza obcego zdefiniowane w bazie danych.Aby uzyskać więcej informacji, zobacz Hierarchiczna aktualizacja — Przegląd.
Aby uzyskać informacje na temat modyfikowania danych w zestawie danych, zobacz Edytowanie danych w aplikacji.
Aktualizacje dwuetapowej
Aktualizowanie źródła danych za pomocą zestawu danych jest procesem dwuetapowym.Przede wszystkim należy zaktualizować zestaw danych o nowe informacje, nowe rekordy, rekordy zmienione lub usunięte rekordy.Jeśli aplikacja dotyczy tylko zestaw danych — po zaktualizowaniu zestawu danych, możesz rozesłać go do innej aplikacji, który będzie wykonywał dalszego przetwarzania zestawu danych — a następnie zakończeniu aktualizacji.
[!UWAGA]
W Windows Forms architektura wiązania danych dba o wysyłanie zmian z formantów powiązanych z danymi do zestawu danych, a nie trzeba jawnie zaktualizować zestaw danych z własnego kodu.Aby uzyskać więcej informacji, zobacz Wiązanie danych formularzy systemu Windows.
Jeśli aktualizujesz źródła danych (np. bazy danych), drugi krok jest wysłanie zmiany z zestawu danych do oryginalnego źródła danych.Oznacza to, że proces aktualizacji zestawu danych nie również zapisuje zmian za pomocą jego źródłem danych; należy jawnie wykonać ten drugi krok.Można zwykle osiągnąć, wywołując metodę aktualizacji samego TableAdapter (lub karta danych) używanego do wypełnienia zestawu danych, chociaż różnych kart, na przykład, można używać również do przenoszenia danych z jednego źródła danych do innej lub do aktualizacji wielu źródeł danych.
Proces aktualizacji dwuetapowej i roli DataRowVersion w pomyślnej aktualizacji
Strukturalnie zestawu danych udostępnia dane jako zestawy zbiorów.Zestawów danych zawierają kolekcje tabel.Tabele zawierają zbiory wierszy.Tabele są dostępne jako kolekcja DataSet obiektu i rekordów są dostępne w Rows Kolekcja DataTable obiektów.Wprowadzanie zmian do danych w zestawie danych po prostu Manipulując kolekcjach przy użyciu metody podstawowej kolekcji jest możliwe, ale jeśli zamierzasz zaktualizować źródła danych należy użyć metody zaprojektowane specjalnie w celu modyfikacji zestawu danych.
Na przykład, aby usunąć rekord z tabeli danych, można wywołać Oryginał z tabeli Rows kolekcji, która fizycznie usuwa rekord z zestawu danych.Jeśli używasz zestawu danych tylko jako strukturalnego magazynu danych i nie są o przekazywanie informacji o zmianach do innej aplikacji, manipulowania kolekcje w ten sposób jest akceptowany sposób aktualizowania zestawu danych.
Jednakże jeśli zamierzasz wysłać zmiany źródła danych lub innej aplikacji, należy zachować informacje o zmianach (czyli metadane) o każdej aktualizacji.Później po wysłaniu zmian do źródła danych lub aplikacji, proces będzie miał informacji, potrzebnych do zlokalizowania i zaktualizować odpowiednie rekordy.Na przykład po usunięciu rekordu w zestawie danych, informacji o usuniętym rekordzie ma być utrzymane w zestawie danych.W ten sposób, kiedy DeleteCommand z TableAdapter jest wywoływana, ma wystarczających informacji historycznych, aby zlokalizować oryginalny rekord w źródle danych, tak aby można było usunąć.Aby uzyskać więcej informacji zobacz "Utrzymywania informacji o zmiany" poniżej.
Łączenie zestawów danych
Można aktualizować zawartość zestawu danych przez Scalanie — to znaczy przez skopiowanie zawartości jednego zestawu danych (nazywane źródła zestawu danych) do wywoływania zestawu danych (określane jako miejsce docelowe zestawu danych).Podczas scalania zestawów danych do docelowego zestawu danych są dodawane nowe rekordy do źródła danych.Ponadto dodatkowe kolumny do źródła danych są dodawane do docelowego zestawu danych.Łączenie zestawów danych jest szczególnie użyteczne, gdy masz zestawu danych lokalnych i uzyskać drugiego zestawu danych z innej aplikacji lub składników, takich jak usługi XML sieci Web.Jest również przydatne, gdy potrzebujesz do integrowania danych z wielu zestawów danych.
Scalając zestawów danych, można również przekazać opcjonalny argument typu Boolean (preserveChanges) informuje, że Merge metoda czy utrzymać istniejące modyfikacje w docelowym zestawie danych.Ponieważ zestawów danych, obsługa wielu wersji rekordów, to należy pamiętać, że rekordy w więcej niż jednej wersji jest scalany.Nastêpuj¹ca tabela ilustruje ustawienia rekordu w dwóch zestawów danych, które zostaną scalone:
DataRowVersion |
Docelowy zestaw danych |
Zestaw danych źródłowych |
---|---|---|
Oryginalny |
Kuba Wilson |
Kuba C.Wilson |
Bieżące |
Jim Wilson |
Kuba C.Wilson |
Wywołanie Merge metoda w powyższej tabeli z preserveChanges=false targetDataset.Merge(sourceDataset) wyniki w następujących czynności:
DataRowVersion |
Docelowy zestaw danych |
Zestaw danych źródłowych |
---|---|---|
Oryginalny |
Kuba C.Wilson |
Kuba C.Wilson |
Bieżące |
Kuba C.Wilson |
Kuba C.Wilson |
Wywołanie Merge metody z preserveChanges = true targetDataset.Merge(sourceDataset, true) wyniki w następujących czynności:
DataRowVersion |
Docelowy zestaw danych |
Zestaw danych źródłowych |
---|---|---|
Oryginalny |
Kuba C.Wilson |
Kuba C.Wilson |
Bieżące |
Jim Wilson |
Kuba C.Wilson |
Przestroga |
---|
W preserveChanges = true scenariusza, jeśli RejectChanges wywoływana jest metoda rekordu w zestawie danych docelowych, a następnie powróci do oryginalnych danych z źródło zestawu danych.Oznacza to, że jeśli zostanie podjęta próba zaktualizowania oryginalnego źródła danych z zestawu docelowego, to nie można odnaleźć oryginalnego wiersza do aktualizacji.Jednak naruszenie współbieżności może zapobiec poprzez wypełnienie innego zestawu danych z zaktualizowane rekordy ze źródła danych i następnie tworzenia seryjnej zapobiega Naruszenie współbieżności. (Naruszenie współbieżności występuje, gdy inny użytkownik modyfikuje rekordu w źródle danych po napełnieniu zestaw danych.) |
Ograniczenia aktualizacji
Aby wprowadzić zmiany do istniejącego wiersza danych, dodać lub zaktualizować dane w poszczególnych kolumnach.Jeśli zestaw danych zawiera ograniczenia (np. klucze obce lub nie dopuszczającej ograniczenia), jest możliwe, że podczas aktualizacji rekordu — po zakończeniu aktualizowania jednej kolumny, ale zanim dojdziesz do następnej — rekord tymczasowo może być w stanie błędu.
Aby zapobiec naruszenia ograniczenia przedwczesnego może czasowo zawiesić ograniczenia aktualizacji.Służy dwóm celom:
Błąd uniemożliwia wypadnięcia po zaktualizowaniu jednej kolumny, zanim pojawi się do innej kolumny.
Wstrzymuje niektórych aktualizacji zdarzenia jest wywoływane (zdarzenia, które są często używane do sprawdzania poprawności).
Po zakończeniu aktualizacji można ponownie włączyć sprawdzanie ograniczenia, które również ponownie włącza zdarzenia aktualizacji i podnosi ich.
[!UWAGA]
W Windows Forms, architektura wiązania danych wbudowane w datagrid wstrzymuje sprawdzanie aż fokus jest przenoszony z wiersza, a nie trzeba jawnie wywołać ograniczeń BeginEdit, EndEdit lub CancelEdit metody.
Ograniczenia są automatycznie wyłączony wówczas, gdy Merge wywołana została metoda dla zestawu danych.Po zakończeniu scalania, jeśli istnieją ograniczenia w zestawie danych, który nie może być włączone, a następnie ConstraintException jest generowany.W tej sytuacji EnforceConstraints właściwość jest ustawiona na false , wszelkie naruszenia ograniczenia muszą być rozwiązane przed zresetowaniem EnforceConstraints właściwość, aby true.
Po zakończeniu aktualizacji można ponownie włączyć sprawdzanie ograniczenia, które również ponownie włącza zdarzenia aktualizacji i podnosi ich.
Aby uzyskać więcej informacji o zawieszeniu zdarzeń, zobacz Porady: wyłączanie ograniczeń w czasie wypełniania zestawu danych.
Błędy aktualizacji zestawu danych
Po dokonaniu aktualizacji rekordu w zestawie danych, istnieje możliwość wystąpienia błędu.Na przykład przypadkowo może zapisywać danych do kolumny, która ma niewłaściwy typ danych, lub zbyt długo, lub które ma inny problem z integralności.Ponadto może być sprawdzanie poprawności specyficzne dla aplikacji, które można podnieść błędy niestandardowe dowolnej fazie zdarzenie aktualizacji.Aby uzyskać więcej informacji, zobacz Sprawdzanie poprawności danych w zestawach danych.
Utrzymanie informacji na temat zmian
Informacje dotyczące zmian w zestawie danych są obsługiwane na dwa sposoby: poprzez Oflagowanie wiersza, który wskazuje, czy została ona wcześniej zmieniona (RowState) oraz utrzymywania wielu kopii rekordu (DataRowVersion).Korzystając z tych informacji, procesów można określić, jakie zmiany zaszły w zestawie danych i można wysłać odpowiednie aktualizacje w źródle danych.
Właściwość RowState
RowState Właściwości DataRow obiekt jest wartość, która dostarcza informacji na temat stanu określonego wiersza danych.
W poniższej tabeli przedstawiono możliwe wartości DataRowState wyliczenie:
Wartość właściwością DataRowState |
Opis |
---|---|
Wiersz został dodany jako element do DataRowCollection. (Ponieważ nie istniał w czasie ostatniego wiersza w tym stanie nie ma odpowiedniej wersji oryginalnej AcceptChanges została wywołana metoda). |
|
Wiersz został usunięty przy użyciu Delete z DataRow obiektu. |
|
Wiersz został utworzony, ale nie jest częścią żadnego DataRowCollection.A DataRow obiekt znajduje się w tym stanie natychmiast po jego utworzeniu i przed dodaniem jej do kolekcji lub jeśli został usunięty z kolekcji. |
|
Wartość kolumny w wierszu została zmieniona w jakiś sposób. |
|
Wiersz nie został zmieniony od czasu AcceptChanges ostatnio została wywołana. |
Wyliczenie DataRowVersion
Zestawy danych zarządzać wieloma wersjami rekordów.DataRowVersion Wyliczenie DataRow obiekt jest wartość, która może służyć do zwracania określonej wersji DataRow obiektu.
W poniższej tabeli przedstawiono możliwe wartości DataRowVersion wyliczenie:
Wartość DataRowVersion |
Opis |
---|---|
Bieżąca wersja rekord zawiera wszystkie zmiany wykonywane na rekord od czasu ostatniego AcceptChanges została wywołana.Jeśli wiersz został usunięty nie istnieje żadna z aktualnych wersji. |
|
Wartość domyślna rekord, zgodnie z definicją zestawu danych schematu lub źródła danych. |
|
Oryginalna wersja rekordu jest kopią rekordu, jak to było, że ostatnie zmiany czasu zostały popełnione w zestawie danych.W praktyce to jest zazwyczaj wersja rekordu jako przeczytane ze źródła danych. |
|
Proponowane wersji rekordu, który jest dostępny tymczasowo, gdy jesteś w środku aktualizacji — to znaczy między momentem wywołana BeginEdit metody i EndEdit metody.Zazwyczaj dostęp proponowanych wersji rekordu w funkcję obsługi zdarzenia takie jak RowChanging.Powołując się na CancelEdit metoda cofa zmiany i usuwa proponowanych wersji wiersza danych. |
Oryginalny i aktualne wersje są przydatne, gdy aktualizacja informacje są przesyłane do źródła danych.Zazwyczaj po wysłaniu aktualizacji do źródła danych, nowe informacje dla bazy danych jest w aktualnej wersji rekordu.Informacje z oryginalnej wersji są używane do zlokalizowania rekordu do aktualizacji.Na przykład w przypadku gdy zmianie klucza podstawowego dla rekordu, musi mieć sposobem zlokalizowania prawidłowego rekordu w źródle danych w celu aktualizacji zmian.Jeżeli istniały nie oryginalnej wersji, następnie rekord będzie najprawdopodobniej dołączane do źródła danych, będącej wynikiem nie tylko w dodatkowych niechcianych rekordu, ale w jednym rekordzie, który jest niedokładna i nieaktualny.Obie wersje są także używane w sterowania współbieżnością; można porównać oryginalnej wersji przeciwko rekordu w źródle danych, aby ustalić, czy rekord został zmieniony od momentu załadowania do zestawu dataset.
Wersja proponowana jest przydatne, gdy zachodzi potrzeba sprawdzenia poprawności przed faktycznego zatwierdzania zmian obiektu DataSet.
Nawet jeśli rekordy uległy zmianie, nie zawsze są wersje oryginalnego lub bieżącego tego wiersza.Po włożeniu nowego wiersza do tabeli nie istnieje żadne oryginalnej wersji bieżącej wersji.Podobnie jeśli usunąć wiersz, wywołując w tabeli Delete metoda, jest oryginalna wersja, ale żadna z aktualnych wersji.
Przeprowadzić test, aby sprawdzić, czy określonej wersji rekordu istnieje przez badanie wiersz danych HasVersion metody.Dostęp do obu wersji rekordu przekazując DataRowVersion wartość wyliczenia jako opcjonalny argument, gdy zostanie wysłane żądanie wartość kolumny.
Pobieranie zmienionych rekordów
Jest to często nie Aktualizuj każdego rekordu w zestawie danych.Na przykład, użytkownik może pracować z Windows Forms DataGridView formant, który wyświetla wiele rekordów.Jednak użytkownik może zaktualizować tylko kilka rekordów, usunąć jeden i Wstaw nowy.Tabele danych i zestawów danych zapewniają metodę (GetChanges) do zwracania tylko wiersze, które zostały zmodyfikowane.
Można utworzyć podzbiór zmienionych rekordów przy użyciu GetChanges metoda tabeli danych (GetChanges) lub zestawu danych (GetChanges) sam.Jeśli wywołanie metody dla tabeli danych, zwraca kopię tabeli o zmienionych rekordów.Podobnie jeśli wywołanie metody w zestawie danych, Ci nowego zestawu danych z tylko dla rekordów zmienionych w nim.GetChangessama zwróci wszystkie zmienione rekordy.W przeciwieństwie, przekazując żądane DataRowState jako parametr GetChanges metoda, można określić podzbiór zmienione rekordy chcesz: nowo dodane rekordy, rekordy oznaczone do usunięcia, odłączone rekordów lub zmodyfikowane rekordy.
Coraz podzbiór rekordów zmienionych jest szczególnie przydatne, gdy chcesz wysyłać rekordy do innego składnika do przetwarzania.Zamiast wysyłania całego zestawu danych, można zmniejszyć obciążenie związane z komunikacji z innego składnika poprzez uzyskanie tylko te rekordy, które wymaga składnika.Aby uzyskać więcej informacji, zobacz Porady: pobieranie zmienionych wierszy.
Zatwierdzanie zmian w zestawie danych
Przy wprowadzaniu zmian w zestawie danych, RowState jest ustawiona właściwość zmienionych wierszy.Oryginalny i aktualne wersje rekordów są ustalone i obsługiwane i udostępnionych użytkownikowi przez RowVersion właściwości.Metadanych przechowywanych w tych właściwości reprezentujące zmiany jest potrzebne aby wysłać właściwą aktualizację do źródła danych.
Jeżeli zmiany odzwierciedla bieżący stan ze źródłem danych, nie trzeba już do utrzymania tej informacji.Zwykle istnieją dwa razy kiedy jest zsynchronizowany z zestawu danych i jej źródła:
Bezpośrednio po informacji została załadowana w zestawie danych, takich jak podczas odczytu danych ze źródła.
Po wysłaniu zmiany z zestawu danych w źródle danych (lecz nie wcześniej, ponieważ straci Zmienianie informacji wymaganych do wysyłania zmian do bazy danych).
Można zatwierdzić oczekujące zmiany do zestawu danych przez wywołanie AcceptChanges metody.Zazwyczaj AcceptChanges byłoby o nazwie o następujących godzinach w aplikacji.
Po załadowaniu zestawu danych.Jeśli załadować zestawu danych przez wywołanie TableAdapter Fill metodę, a następnie kartę automatycznie zatwierdza zmiany dla Ciebie.Niemniej jednak jeśli załadować zestawu danych przez scalenie innego zestawu danych, następnie należy ręcznie zatwierdzić zmiany.
[!UWAGA]
Karta uniemożliwia automatyczne zatwierdzanie zmian podczas wywoływania Fill metoda przez ustawienie AcceptChangesDuringFill właściwości karty sieciowej do false.Jeśli jest ustawiona false, a następnie RowState każdy wiersz wstawiony podczas wypełnienia jest ustawiony na wartość Added.
Po przes zmiany zestawu danych do innego procesu, takie jak usługi XML sieci Web.
Przestroga Zatwierdzeniem zmian w ten sposób wymazuje wszystkie informacje o zmianach.Przekazać zmiany, aż po wykonaniu wszystkich operacji, w których zależy od aplikacji wiedząc, jakie zmiany zostały dokonane w zestawie danych.
Ta metoda ma następujące skutki:
Zapisuje Current wersji rekordu w jego Original wersji, zastępując oryginalną wersję.
Usuwa żadnych wierszy, których RowState właściwość jest ustawiona na Deleted.
AcceptChanges Metoda jest dostępna na trzech poziomach.Można go wywołać na DataRow obiekt, który zatwierdza zmiany tylko do tego wiersza.Można również wywołać ją na DataTable obiekt, aby zatwierdzić wszystkie wiersze w tabeli lub na DataSet obiekt, aby zatwierdzić wszystkie oczekujące zmiany we wszystkich rekordach wszystkich tabel z zestawu danych.
W poniższej tabeli opisano, jakie zmiany są popełnione w oparciu o co obiekt, wywoływana jest metoda.
Metoda |
Wynik |
---|---|
Zmiany zostały wprowadzone tylko w określonym wierszu |
|
Zmiany zostały wprowadzone na wszystkie wiersze w określonej tabeli |
|
Zmiany zostały wprowadzone we wszystkich wierszach we wszystkich tabelach zestawu danych |
[!UWAGA]
Jeśli załadować zestawu danych przez wywołanie TableAdapter Fill metoda, nie musiał jawnie Zaakceptuj zmiany; Domyślnie Fill wywołania metody AcceptChanges metoda po zakończeniu wypełnianie tabeli danych.
Metody powiązane, RejectChanges, cofa skutki zmian przez skopiowanie Original wersji w Current wersji rekordów i ustawienie RowState z każdego rekordu powrót do Unchanged.
Sprawdzanie poprawności danych
W celu sprawdzenia, czy dane w aplikacji spełnia wymagania dotyczące procesów, które są przekazywane do, często trzeba dodać sprawdzanie poprawności.Może to obejmować sprawdzania, czy wpis użytkownika w formularzu jest poprawny, sprawdzanie poprawności danych wysyłanych do aplikacji przez inną aplikację lub nawet sprawdzenie, czy informacje obliczane wewnątrz składnika mieści się w ograniczenia danych źródłowych i wymaganiami aplikacji.
Można sprawdzić poprawność danych na kilka sposobów:
W warstwie biznesowej przez dodanie kodu do aplikacji do sprawdzania poprawności danych.Zestaw danych jest jedno miejsce, można to zrobić.Zestaw danych zawiera niektóre z zalet sprawdzania poprawności zaplecza — takie jak możliwość sprawdzania poprawności zmian, jak zmieniają się wartości kolumn i wierszy.Aby uzyskać więcej informacji, zobacz Sprawdzanie poprawności danych w zestawach danych.
W warstwie prezentacji, dodając sprawdzanie poprawności do formularzy.Aby uzyskać więcej informacji, zobacz Sprawdzanie poprawności danych użytkownika w formularzach systemu Windows.
W danych wewnętrzna baza danych, wysyłając dane w źródle danych — na przykład baza danych — i pozostawienie go zaakceptować lub odrzucić dane.Jeśli pracujesz z bazą danych, która wykorzystuje zaawansowane urządzenia do sprawdzania poprawności danych i dostarczanie informacji o błędzie, może to być praktycznego podejścia ponieważ może sprawdzać poprawność danych, bez względu na to, skąd pochodzi.Jednak nie może go wstawić wymagań sprawdzania poprawności specyficzne dla aplikacji.Dodatkowo posiadające źródło danych, sprawdzanie poprawności danych może spowodować liczne przesłania do źródła danych, w zależności od tego, jak aplikacja ułatwia rozwiązywanie problemów dotyczących błędów sprawdzania poprawności, podniesione przez back-end.
Uwaga dotycząca zabezpieczeń Podczas korzystania z poleceń danych z CommandType właściwość zestaw do Text, ostrożnie sprawdź informacje przesyłane z klienta przed przekazaniem go do bazy danych.Złośliwi użytkownicy mogą próbować wysłać (wstrzyknąć) zmodyfikowanych lub dodatkowych instrukcji SQL w celu uzyskania nieautoryzowanego dostępu lub uszkodzenie bazy danych.Przed przeniesieniem danych wprowadzonych przez użytkownika do bazy danych, należy zawsze sprawdzić informacje są prawidłowe; jest najlepszym rozwiązaniem zawsze używać sparametryzowanych kwerend lub procedur przechowywanych, jeśli jest to możliwe.Aby uzyskać więcej informacji, zobacz Script Exploits Overview.
Po dokonaniu zmian w zestawie danych, można przesłać zmiany do źródła danych.Najczęściej można to zrobić przez wywołanie Update metodę TableAdapter (lub karta danych).Pętle metoda za pomocą każdego rekordu w tabeli danych określa, jaki typ aktualizacji jest wymagany (aktualizacji, wstawiania lub usuwania), jeśli w ogóle, a następnie wykonuje odpowiednie polecenie.
Jak aktualizacji są przesyłane do źródła danych
Ilustracją jak się aktualizacje Załóżmy, że aplikacja używa obiektu dataset zawierającego tabelę danych pojedynczy.Aplikacja pobiera dwa wiersze z bazy danych.Po ich pobraniu tabela w pamięci danych wygląda następująco:
(RowState) CustomerID Name Status
(Unchanged) c200 Robert Lyon Good
(Unchanged) c400 Nancy Buchanan Pending
Nancy Buchanan stan aplikacji zmienia się na "Preferowane". Aby uwzględnić tę zmianę, wartość RowState zmienia właściwość dla tego wiersza z Unchanged do Modified.Wartość RowState właściwość dla pierwszego wiersza pozostaje Unchanged.Tabela danych teraz wygląda następująco:
(RowState) CustomerID Name Status
(Unchanged) c200 Robert Lyon Good
(Modified) c400 Nancy Buchanan Preferred
Wywołania aplikacji teraz Update metodę transmisji zestawu danych do bazy danych.Metoda z kolei sprawdza każdy wiersz.Dla pierwszego wiersza metoda transmituje nie instrukcji SQL do bazy danych, ponieważ tego wiersza nie zmienił się od pierwotnie została pobrana z bazy danych.
Dla drugiego wiersza, jednak Update metoda wywołuje polecenie odpowiednie dane i automatycznie przesyła do bazy danych.Składni instrukcji SQL jest zależna od dialekt SQL obsługiwane przez Magazyn danych.Jednak następujące ogólne cechy przekazywanych instrukcji SQL są godne uwagi:
Przesyłanych instrukcja SQL jest instrukcja UPDATE.Karta wie, że ma użyć instrukcji UPDATE, ponieważ wartość RowState właściwość jest Modified.
Przesyłanych instrukcja SQL zawiera klauzulę WHERE, wskazująca, że miejsce docelowe instrukcja UPDATE jest wiersz których CustomerID = 'c400'.Ta część instrukcji SELECT odróżnia wiersz miejsce docelowe od wszystkich pozostałych, ponieważ CustomerID jest to klucz podstawowy tabeli docelowej.Informacje dla klauzuli WHERE jest pochodną oryginalnej wersji rekordu (DataRowVersion.Original), w przypadku, gdy zostały zmienione wartości wymagane do identyfikowania wiersza.
Przesyłanych instrukcja SQL zawiera klauzuli SET, aby ustawić nowe wartości zmodyfikowanej kolumny.
[!UWAGA]
Jeśli TableAdapter UpdateCommand właściwość została ustawiona na nazwę procedury przechowywanej, karta nie Skonstruuj instrukcję SQL.Zamiast tego wywołuje procedura składowana z odpowiednimi parametrami przekazany.
Przekazywanie parametrów
Wartości dla rekordów, które mają być aktualizowane w bazie danych są zazwyczaj przesyłane przy użyciu parametrów.Gdy TableAdapter Update metoda wykonuje instrukcję UPDATE, należy go wypełnić wartości parametru.Robi się te wartości z Parameters kolekcji dla polecenia odpowiednich danych — w tym przypadku, UpdateCommand obiekt w TableAdapter.
Jeśli użyto narzędzia programu Visual Studio do generowania karty danych, UpdateCommand obiekt będzie zawierać zbiór parametrów, które odpowiadają każdego symbolu zastępczego parametru w instrukcji.
SqlParameter.SourceColumn Właściwość każdego parametru wskazuje na kolumnę w tabeli danych.Na przykład SourceColumn właściwość dla au_id i Original_au_id parametrów jest ustawiona na dowolnej kolumny w tabeli danych zawiera identyfikator autora.Gdy karty Update działa metoda odczytuje kolumna id autora z rekordu aktualizowany i wstawia wartości w instrukcji.
W instrukcji UPDATE należy określić zarówno nowe wartości (te, które zostaną zapisane w rekordzie) jak również stare wartości (tak aby rekord, który ma być aktualizowane może znajdować się w bazie danych).Istnieją dwa parametry dla każdej wartości: jedną dla klauzuli SET, a druga dla klauzuli WHERE.Oba parametry odczytywać dane z rekordu są aktualizowane, ale dostać różne wersje wartość kolumny na podstawie parametru Właściwości SqlParameter.SourceVersion.Parametr dla klauzuli SET pobiera bieżącą wersję, a parametr dla klauzuli WHERE pobiera oryginalnej wersji.
[!UWAGA]
Można także zdefiniować wartości w Parameters kolekcji samodzielnie w kodzie, który zazwyczaj chcesz zrobić w module obsługi zdarzeń dla karty danych RowChanging zdarzenia.
Aktualizowanie powiązanych tabel
Jeśli zestaw danych zawiera wiele tabel, musisz zaktualizować je indywidualnie przez wywołanie Update metoda każdej karty danych oddzielnie.Jeśli tabele mają relację nadrzędny podrzędny, jest prawdopodobne, że będzie trzeba wysłać aktualizacje do bazy danych w określonym porządku.Typowy scenariusz jest, że dodano elementem nadrzędnym i powiązanych rekordach podrzędnych do zestawu danych — na przykład, nowy rekord klienta i jednego lub więcej rekordów powiązanego zamówienia.Jeśli wymusza zasady relacyjna integralność z samą bazą danych, następnie to podniesie błędów po wysłaniu nowego elementu podrzędnego rekordów do bazy danych zanim rekord nadrzędny został utworzony.
I odwrotnie, usunięcie powiązanych rekordów w zestawie danych, następnie ogólnie musisz wysłać aktualizacje w odwrotnej kolejności: tabela podrzędna po raz pierwszy, następnie rodzic tabeli.W przeciwnym razie bazy danych prawdopodobnie Zgłoś błąd, ponieważ reguły więzów integralności zostanie uniemożliwić usunięcie rekordu nadrzędnego podczas powiązanych rekordach podrzędnych nadal istnieją.
Ogólna zasada dotycząca wysyłania aktualizacji dla tabel pokrewnych jest wykonaj następującej kolejności:
Tabela podrzędna: usuń rekordy.
Tabela nadrzędna: wstaw, zaktualizuj i usuń rekordy.
Tabela podrzędna: wstaw i zaktualizuj rekordy.
Aby uzyskać więcej informacji, zobacz Wskazówki: zapisywanie danych w bazie danych (wiele tabel).
Kontrola zbieżności
Ponieważ zestawów danych jest odłączony od źródła danych, nie przechowuje blokad dla rekordów w źródle danych.W związku z tym jeśli chcesz zaktualizować bazę danych i jest ważne dla aplikacji do utrzymania sterowania współbieżnością, należy uzgodnić rekordów w zestawie danych z wartościami z bazy danych.Na przykład dowiedzieć, że rekordy w bazie danych uległy zmianie od czasu ostatniego wypełniania zestawu danych.W takim przypadku należy wykonać odpowiednie do aplikacji logikę do określenia, co powinno się zdarzyć z rekordu bazy danych lub zmienionego rekordu, znajdującym się w zestawie danych.
Zobacz też
Zadania
Porady: aktualizowanie danych za pomocą TableAdapter
Koncepcje
Przygotowywanie aplikacji na otrzymywanie danych
Pobieranie danych do aplikacji
Powiązywanie kontrolek z danymi w Visual Studio
Sprawdzanie poprawności danych