TableAdapter — Przegląd
Klasy TableAdapter zapewniają komunikację między bazą danych a aplikacją.W szczególności TableAdapter łączy się z bazą danych, wykonuje zapytania i przechowywane procedury, zwracając dowolną nową tabelę danych wypełnioną zwracanymi danymi lub wypełnia zwracanymi danymi istniejący DataTable.Klasy TableAdapter są również używane do wysyłania zaktualizowanych danych z aplikacji z powrotem do bazy danych.
Użytkownicy poprzednich wersji programu Visual Studio mogą sobie wyobrazić TableAdapter jako o DataAdapter z wbudowanym obiektem połączenia i możliwością zawierania wielu zapytań.Każde zapytanie dodane do TableAdapter jest dostępne jako metoda publiczna, która nazywa się po prostu tak, jak inne metody lub funkcje obiektu.
Oprócz standardowej funkcjonalności DataAdapter, klasy TableAdapter udostępniają dodatkowe typizowane metody, które hermetyzują zapytania współużytkujące schemat ze skojarzonym typem DataTable.Innymi słowy, w TableAdapter można mieć dowolną liczbę zapytań, dopóki zwracane dane będą zgodne z tym samym schematem.
W poprzedniej wersji programu Visual Studio, adaptery danych ADO.NET były używane do komunikacji między aplikacją a bazą danych.Podczas gdy dane karty nadal są głównym składnikiem .NET Framework Data Providers, klasy TableAdapter są generowane przez projektanta składników, zwiększając swą funkcjonalność przez DataAdapter.Klasy TableAdapter zazwyczaj zawierają metody pobierania Fill i aktualizacji Update danych w bazie danych.
Klasy TableAdapter są tworzone za pomocą Projektant obiektów Dataset wewnątrz silnie typizowanych zestawów danych.Klasy TableAdapter można utworzyć podczas tworzenia nowego zestawu danych z Kreator konfiguracji źródła danych.Klasy TableAdapter można również utworzyć w istniejących zestawach danych z TableAdapter Kreator konfiguracji lub poprzez przeciąganie obiektów bazy danych z Eksplorator serwera w Projektant obiektów Dataset.Aby uzyskać więcej informacji, zobacz Porady: tworzenie TableAdapters.
Podczas gdy klasy TableAdapter są zaprojektowane z Projektant obiektów Dataset, klasy TableAdapter nie są generowane jako zagnieżdżone klasy DataSet.Znajdują się one w odrębnej przestrzeni nazw specyficznej dla każdego zestawu danych.Na przykład jeśli istnieje zestaw danych o nazwie NorthwindDataSet, klasy TableAdapter skojarzone z DataTable w NorthwindDataSet mogą być w przestrzeni nazw NorthwindDataSetTableAdapters.Aby uzyskać dostęp do określonego TableAdapter programowo, należy zadeklarować nowe wystąpienie TableAdapter.Na przykład:
Dim northwindDataSet As New NorthwindDataSet()
Dim customersTableAdapter As New NorthwindDataSetTableAdapters.CustomersTableAdapter()
customersTableAdapter.Fill(northwindDataSet.Customers)
NorthwindDataSet northwindDataSet = new NorthwindDataSet();
NorthwindDataSetTableAdapters.CustomersTableAdapter customersTableAdapter =
new NorthwindDataSetTableAdapters.CustomersTableAdapter();
customersTableAdapter.Fill(northwindDataSet.Customers);
Skojarzony schemat elementu DataTable
Podczas tworzenia TableAdapter, początkowe zapytanie lub składowana procedura jest używana do definiowania schematu TableAdapter skojarzonego z DataTable.Można wykonać początkowe zapytanie lub przechowywaną procedurę przez wywołanie metody Fill głównego TableAdaptera (która wypełnia TableAdapter skojarzony z DataTable).Wszelkie zmiany dokonane w głównym zapytaniu TableAdapter są odzwierciedlane w schemacie skojarzonej tabeli danych.Na przykład usunięcie kolumny z głównego zapytania usuwa kolumnę ze skojarzonej tabeli danych.Jeśli są dodatkowe zapytania w TableAdapter, użyj instrukcji SQL zwracającej kolumny, które nie znajdują się w głównym zapytaniu, następnie projektant podejmie próbę synchronizacji zmian kolumn między głównym zapytaniem a wszelkimi dodatkowymi zapytaniami.Aby uzyskać więcej informacji, zobacz Porady: edytowanie TableAdapters.
Polecenia aktualizacji TableAdapter
Aktualizacje funkcjonalności TableAdapter są uzależnione od tego, ile informacji jest dostępne na podstawie głównych zapytań dostarczonych w kreatorze TableAdapter.Na przykład, klasy TableAdapter, które są skonfigurowane do pobierania wartości z wielu tabel (sprzężenia), wartości skalarnej, widoków lub wyników funkcji agregujących nie są początkowo tworzone z możliwością, aby wysyłać aktualizacje podstawowej bazy danych.Jednakże można skonfigurować ręcznie w polecenia INSERT, UPDATE i DELETE w oknie Właściwości.
Zapytania TableAdapter
W odróżnieniu od standardowych danych, klasy TableAdapter mogą zawierać wiele zapytań do wypełnienia skojarzonych tabel danych.Można zdefiniować dowolną, wymaganą przez aplikacje liczbę zapytań dla TableAdapter, dopóki każde zapytanie zwraca dane, które są zgodne ze schematem skojarzonej tabeli danych.Umożliwia ładowanie danych, które spełniają zróżnicowane kryteria.Na przykład jeśli aplikacja zawiera tabelę klienci, można utworzyć zapytanie wypełniające tabelę klientami, których imię zaczyna się od określonej litery lub inne zapytanie, które wypełnia tabelę klientami znajdującymi się w tym samym stanie.Aby wypełnić tabelę Customers klientami danego stanu można utworzyć zapytanie FillByState, które przyjmuje dla wartości stanu parametr: SELECT * FROM Customers WHERE State = @State.Podczas wykonywania zapytania przez wywołanie metody FillByState i przekazanie wartości parametru: CustomerTableAdapter.FillByState("WA").Aby uzyskać więcej informacji, zobacz Porady: tworzenie zapytań TableAdapter.
Oprócz zapytań, które zwracają dane tego samego schematu, jako tabele danych TableAdapter można dodawać zapytania zwracające wartości skalarne (pojedyncze).Na przykład, utworzenie zapytania, które zwraca liczbę klientów (SELECT Count(*) From Customers) jest prawidłowe dla CustomersTableAdapter nawet, jeśli dane zwracane są niezgodne ze schematem tabeli.
Właściwość ClearBeforeFill
TableAdapter dodaje właściwość nie dostępną w klasie bazowej DataAdapter.Domyślnie każdorazowo podczas wykonywania zapytania, aby wypełnić tabelę danych TableAdapter, dane są czyszczone, i tylko wyniki zapytania są ładowane do tabeli.Jeśli chcesz dodać lub scalić dane zwrócone przez zapytanie z danymi w tabeli danych, w TableAdapter ustaw false dla właściwości ClearBeforeFill .Bez względu na to, czy dane są czyszczone, należy jawnie wysyłać aktualizacje do bazy danych.Dlatego pamiętaj, aby zapisać wszelkie zmiany wprowadzone do danych w tabeli przed wykonaniem innego zapytania, które wypełnia tabelę.Aby uzyskać więcej informacji, zobacz Porady: aktualizowanie danych za pomocą TableAdapter.
Dziedziczenie po TableAdapter
Klasy TableAdapter rozszerzają funkcjonalności standardowych adapterów danych hermetyzując skonfigurowany DataAdapter.TableAdapter domyślnie dziedziczy Component i nie może być rzutowany na klasę DataAdapter.Rzutowanie TableAdapter na DataAdapter skutkuje pojawieniem się wyjątku InvalidCastException.Aby zmienić klasę bazową TableAdapter, można wprowadzić klasę, która pochodzi z Component we właściwości Klasa bazowa TableAdaptera w Projektant zestawu danych.
Metody i właściwości klasy TableAdapter
Klasa TableAdapter nie jest częścią .NET Framework i nie można jej wyszukać w dokumentacji ani w Przeglądarce obiektów.Jest ona tworzona w czasie projektowania, gdy używasz jednego z kreatorów wymienionych powyżej.Nazwa przypisana podczas tworzenia klasy TableAdapter opiera się na nazwie tabeli, w której pracujesz.Na przykład, kiedy tworzona jest klasa TableAdapter na podstawie tabeli w bazie danych o nazwie Orders, klasie TableAdapter zostanie nadana nazwa OrdersTableAdapter.Nazwę klasy TableAdapter można zmienić za pomocą właściwości Nazwa w Projektant zestawu danych.
Poniżej przedstawiono najczęściej używane metody i właściwości klasy TableAdapter:
Członek |
Opis |
---|---|
TableAdapter.Fill |
Wypełnia TableAdapter skojarzonymi danymi tabeli wynikami polecenia SELECT klasy TableAdapter.Aby uzyskać więcej informacji, zobacz Porady: wypełnianie zestawu danych danymi. |
TableAdapter.Update |
Wysyła zmiany z powrotem do bazy danych i zwraca liczbę całkowitą reprezentującą liczbę wierszy uwzględnioną w aktualizacji.Aby uzyskać więcej informacji, zobacz Porady: aktualizowanie danych za pomocą TableAdapter. |
TableAdapter.GetData |
Zwraca nowy obiekt DataTable wypełniony danymi. |
TableAdapter.Insert |
Tworzy nowy wiersz w tabeli danych.Aby uzyskać więcej informacji, zobacz Porady: dodawanie wierszy do DataTable. |
TableAdapter.ClearBeforeFill |
Określa, czy tabela danych zostanie opróżniona, zanim wywołasz jedną z metod Fill. |
Metoda TableAdapter.Update
Klasy TableAdapter używają poleceń do odczytu i zapisu danych z bazy danych.Początkowe zapytanie (główne) Fill klasy TableAdapter jest używane jako podstawa do tworzenia schematu skojarzonej tabeli danych, jak również poleceń InsertCommand, UpdateCommand i DeleteCommand powiązanych z metodą TableAdapter.Update.Oznacza to, że wywołanie metody Update klasy TableAdapter wykonuje utworzone instrukcje, gdy klasa TableAdapter została pierwotnie skonfigurowana, a nie dodana w jednym z dodatkowych zapytań za pomocą Kreatora konfiguracji zapytania TableAdapter.
Korzystając z TableAdapter można skutecznie wykonywać te same operacje za pomocą poleceń, które zazwyczaj są wykorzystywane.Na przykład jeśli wywołasz metodę Fill adaptera, ten wykona polecenia danych w swojej właściwości SelectCommand i użyje czytnika danych (na przykład SqlDataReader) by załadować zestaw wyników w tabeli danych.Podobnie jeśli wywołasz metodę Update adaptera, ten wykona odpowiednie polecenie (we właściwościach UpdateCommand, InsertCommand i DeleteCommand ) dla każdego zmienionego rekordu w tabeli danych.
[!UWAGA]
Jeśli jest wystarczająca ilość informacji w głównym zapytaniu, polecenia InsertCommand, UpdateCommand i DeleteCommand są tworzone domyślnie podczas generowania TableAdapter.Jeśli główne zapytanie klasy TableAdapter jest użyte więcej niż w jednej tabeli instrukcji SELECT, jest możliwe, że projektant nie będzie w stanie wygenerować poleceń InsertCommand, UpdateCommand i DeleteCommand.Jeśli te polecenia nie są generowane, może wystąpić błąd podczas wykonywania metody TableAdapter.Update.
Właściwość TableAdapter.GenerateDBDirectMethods
W uzupełnieniu do poleceń InsertCommand, UpdateCommand i DeleteCommand, klasy TableAdapter są tworzone za pomocą metod, które mogą być wykonywane bezpośrednio w bazie danych.Te metody (TableAdapter.Insert, TableAdapter.Update i TableAdapter.Delete) mogą być wywołane bezpośrednio do manipulowania danymi w bazie danych.Oznacza to, że można wywołać poszczególne metody w kodzie zamiast wywoływania TableAdapter.Update do obsługi wstawiania, aktualizacji i usuwania, oczekujących dla tabeli skojarzonych danych.
Jeśli nie chcesz utworzyć tych bezpośrednich metod, ustaw właściwości GenerateDbDirectMethods klasy TableAdapter na false (w oknie Właściwości ).Dodatkowe zapytania dodane do TableAdapter są autonomicznymi zapytaniami — nie generują tych metod.
Obsługa typów Nullable klasy TableAdapter
Klasy TableAdapter obsługują typy nullable Nullable(Of T) i T?.Aby uzyskać więcej informacji dotyczących typów nullable w języku Visual Basic, zobacz Typy o wartości zerowalnej (Visual Basic).Aby uzyskać więcej informacji dotyczących typów nullable w języku C#, zobacz Używanie typów dopuszczających wartości zerowe (Przewodnik programowania w języku C#).
Zobacz też
Zadania
Porady: łączenie z danymi w bazie danych
Wskazówki: łączenie z danymi w bazie danych (formularze systemu Windows)
Koncepcje
Przygotowywanie aplikacji na otrzymywanie danych
Pobieranie danych do aplikacji
Powiązywanie kontrolek z danymi w Visual Studio
Sprawdzanie poprawności danych