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.
Aplikacje danych n-warstwowe to aplikacje, które uzyskują dostęp do danych i są podzielone na wiele warstw logicznych, czyli poziomów. Rozdzielenie składników aplikacji na warstwy dyskretne zwiększa łatwość konserwacji i skalowalność aplikacji. W ten sposób można łatwiej stosować nowe technologie, które można zastosować do pojedynczej warstwy bez konieczności przeprojektowania całego rozwiązania. Architektura N-warstwowa obejmuje warstwę prezentacji, warstwę środkową i warstwę danych. Warstwa środkowa zazwyczaj obejmuje warstwę dostępu do danych, warstwę logiki biznesowej i udostępnione składniki, takie jak uwierzytelnianie i walidacja. Warstwa danych zawiera relacyjną bazę danych. Aplikacje n-warstwowe zwykle przechowują poufne informacje w warstwie dostępu do danych warstwy środkowej, aby zachować izolację od użytkowników końcowych, którzy uzyskują dostęp do warstwy prezentacji. Aby uzyskać więcej informacji, zobacz N-warstwowe aplikacje danych — omówienie.
Jednym ze sposobów oddzielenia różnych warstw w aplikacji n-warstwowej jest utworzenie odrębnych projektów dla każdej warstwy, która ma zostać uwzględniona w aplikacji. Typizowane zestawy danych zawierają DataSet Project właściwość, która określa, do których projektów powinien przejść wygenerowany zestaw danych i TableAdapter kod.
W tym przewodniku pokazano, jak oddzielić zestaw danych i TableAdapter kod w oddzielne projekty biblioteki klas przy użyciu Projektanta zestawów danych. Po rozdzieleniu zestawu danych i kodu TableAdapter należy utworzyć usługę „Windows Communication Foundation Services i WCF Data Services” w programie Visual Studio, aby wywołać warstwę dostępu do danych. Na koniec utworzysz aplikację Windows Forms jako warstwę prezentacji. Ta warstwa uzyskuje dostęp do danych z usługi danych.
W tym przewodniku wykonasz następujące kroki:
Utwórz nowe rozwiązanie n-warstwowe zawierające wiele projektów.
Dodaj dwa projekty bibliotek klas do rozwiązania wielowarstwowego.
Utwórz typowany zestaw danych przy użyciu Kreatora konfiguracji źródła danych.
Rozdziel wygenerowany kod TableAdapters i zestawu danych na odrębne projekty.
Utwórz usługę Windows Communication Foundation (WCF), aby wywołać warstwę dostępu do danych.
Tworzenie funkcji w usłudze w celu pobierania danych z warstwy dostępu do danych.
Utwórz aplikację Windows Forms, która będzie służyć jako warstwa prezentacji.
Utwórz kontrolki Windows Forms powiązane ze źródłem danych.
Napisz kod, aby wypełnić tabele danych.
Wymagania wstępne
Do ukończenia tego samouczka potrzebne są obciążenia tworzenia aplikacji klasycznych platformy .NEToraz przechowywania i przetwarzania danych zainstalowanych w programie Visual Studio. Aby je zainstalować, otwórz Instalator programu Visual Studio i wybierz Modyfikuj (lub Więcej>Modyfikuj) obok wersji programu Visual Studio, którą chcesz zmodyfikować. Zobacz Modyfikowanie programu Visual Studio.
W tym przewodniku użyto bazy danych SQL Server Express LocalDB i przykładowej bazy danych Northwind.
Jeśli nie masz bazy danych LOCALDB programu SQL Server Express, zainstaluj ją ze strony pobierania programu SQL Server Express lub za pośrednictwem Instalatora programu Visual Studio. W Instalatorze programu Visual Studio można zainstalować bazę danych SQL Server Express LocalDB w ramach obciążenia tworzenia aplikacji klasycznych platformy .NET lub jako pojedynczy składnik.
Zainstaluj przykładową bazę danych Northwind, wykonując następujące kroki:
W programie Visual Studio otwórz okno eksploratora obiektów programu SQL Server. (Eksplorator obiektów programu SQL Server jest instalowany w ramach obciążenia Magazyn danych i przetwarzanie w Instalatorze programu Visual Studio). Rozwiń węzeł SQL Server. Kliknij prawym przyciskiem myszy wystąpienie bazy danych LocalDB i wybierz pozycję Nowe zapytanie.
Jeśli nie widzisz wystąpienia LocalDB, użyj przycisku paska narzędzi Dodaj SQL Server. Zostanie wyświetlone okno dialogowe. W oknie dialogowym rozwiń Lokalny i wybierz MSSQLLocalDB. Wprowadź odpowiednie poświadczenia. Możesz pozostawić wybór domyślny dla bazy danych.
Wybierz opcję Połącz. Węzeł dla bazy danych LocalDB jest dodawany w Eksploratorze obiektów programu SQL Server.
Kliknij prawym przyciskiem myszy wystąpienie bazy danych LocalDB i wybierz pozycję Nowe zapytanie.
Zostanie otwarte okno edytora zapytań.
Skopiuj skrypt Northwind Transact-SQL do schowka. Ten skrypt języka T-SQL tworzy bazę danych Northwind od podstaw i wypełnia ją danymi.
Wklej skrypt języka T-SQL do edytora zapytań, a następnie wybierz przycisk Wykonaj.
Po krótkim czasie zapytanie zakończy działanie i zostanie utworzona baza danych Northwind.
Tworzenie n-warstwowego rozwiązania i biblioteki klas do przechowywania zestawu danych (DataEntityTier)
Pierwszym krokiem tego przewodnika jest utworzenie rozwiązania i dwóch projektów bibliotek klas. Biblioteka pierwszej klasy zawiera zestaw danych (wygenerowana klasa typowa DataSet i tabele DataTable, które przechowują dane aplikacji). Ten projekt jest używany jako warstwa jednostki danych aplikacji i zwykle znajduje się w warstwie środkowej. Zestaw danych tworzy początkowy zestaw danych i automatycznie oddziela kod do dwóch bibliotek klas.
Uwaga / Notatka
Przed kliknięciem przycisku OK pamiętaj, aby poprawnie nazwać projekt i rozwiązanie. Ułatwi to ukończenie tego przewodnika.
Aby utworzyć rozwiązanie n-warstwowe i bibliotekę klas DataEntityTier
W programie Visual Studio utwórz projekt przy użyciu szablonu projektu Windows Forms App (.NET Framework) dla języka C# lub Visual Basic. Platformy .NET Core, .NET 5 i nowsze nie są obsługiwane.
Nadaj projektowi nazwę DataEntityTier.
Nadaj rozwiązaniu nazwę NTierWalkthrough, a następnie wybierz przycisk OK.
Rozwiązanie NTierWalkthrough zawierające projekt DataEntityTier jest tworzone i dodawane do Eksploratora rozwiązań.
Utwórz bibliotekę klas do obsługi TableAdapters (DataAccessTier)
Następnym krokiem po utworzeniu projektu DataEntityTier jest utworzenie innego projektu biblioteki klas. Ten projekt zawiera wygenerowane elementy TableAdapters i jest nazywany warstwą dostępu do danych aplikacji. Warstwa dostępu do danych zawiera informacje wymagane do nawiązania połączenia z bazą danych i zwykle znajdują się w warstwie środkowej.
Aby utworzyć oddzielną bibliotekę klas dla TableAdapters
Kliknij prawym przyciskiem myszy rozwiązanie w Eksploratorze rozwiązań i wybierz polecenie Dodaj>nowy projekt.
Wybierz szablon projektu Biblioteka klas (.NET Framework).
Nadaj projektowi nazwę DataAccessTier i wybierz przycisk OK.
Projekt DataAccessTier jest tworzony i dodawany do rozwiązania NTierWalkthrough.
Tworzenie zestawu danych
Następnym krokiem jest utworzenie typizowanego zestawu danych. Typizowane zestawy danych są tworzone w jednym projekcie z wykorzystaniem zarówno klasy zestawu danych (w tym klas DataTables), jak i klas TableAdapter. (Wszystkie klasy są generowane w jednym pliku). Po rozdzieleniu zestawu danych i elementu TableAdapters na różne projekty jest to klasa zestawu danych przeniesiona do innego projektu, pozostawiając TableAdapter klasy w oryginalnym projekcie. W związku z tym utwórz zestaw danych w projekcie, który ostatecznie będzie zawierać elementy TableAdapters (projekt DataAccessTier). Zestaw danych można utworzyć przy użyciu Kreatora konfiguracji źródła danych.
Uwaga / Notatka
Aby utworzyć połączenie, musisz mieć dostęp do przykładowej bazy danych Northwind. Aby uzyskać informacje o sposobie konfigurowania przykładowej bazy danych Northwind, zobacz How to: Install sample databases (Instrukcje: instalowanie przykładowych baz danych).
Aby utworzyć zestaw danych
Wybierz pozycję DataAccessTier w Eksploratorze rozwiązań.
W menu Dane wybierz pozycję Pokaż źródła danych.
Zostanie otwarte okno Źródła danych .
W oknie Źródła danych wybierz pozycję Dodaj nowe źródło danych , aby uruchomić Kreatora konfiguracji źródła danych.
Na stronie Wybierz typ źródła danych wybierz pozycję Baza danych , a następnie wybierz pozycję Dalej.
Na stronie Wybieranie połączenia danych wykonaj jedną z następujących akcji:
Jeśli na liście rozwijanej jest dostępne połączenie danych z przykładową bazą danych Northwind, wybierz je.
lub
Wybierz pozycję Nowe połączenie , aby otworzyć okno dialogowe Dodawanie połączenia .
Jeśli baza danych wymaga hasła, wybierz opcję dołączenia poufnych danych, a następnie wybierz przycisk Dalej.
Uwaga / Notatka
Jeśli wybrano lokalny plik bazy danych (zamiast łączyć się z programem SQL Server), może zostać wyświetlony monit o dodanie pliku do projektu. Wybierz pozycję Tak , aby dodać plik bazy danych do projektu.
Wybierz pozycję Dalej na stronie Zapisz parametry połączenia w pliku konfiguracyjnym aplikacji.
Rozwiń węzeł Tabele na stronie Wybieranie obiektów bazy danych .
Zaznacz pola wyboru tabel Klienci i Zamówienia , a następnie wybierz pozycję Zakończ.
Element NorthwindDataSet jest dodawany do projektu DataAccessTier i jest wyświetlany w oknie Źródła danych .
Oddziel elementy TableAdapters od zestawu danych
Po utworzeniu zestawu danych oddziel wygenerowaną klasę zestawu danych od klasy TableAdapters. W tym celu należy ustawić właściwość DataSet Project na nazwę projektu, w którym ma być przechowywana oddzielona klasa zestawu danych.
Aby oddzielić TableAdaptery od zestawu danych
Kliknij dwukrotnie plik NorthwindDataSet.xsd w Eksploratorze rozwiązań , aby otworzyć zestaw danych w Projektancie zestawów danych.
Wybierz pusty obszar w edytorze projektowania.
Znajdź węzeł Projekt Zestawu danych w oknie Właściwości .
Na liście Projekt zestawu danych wybierz pozycję DataEntityTier.
W menu Build wybierz pozycję Build Solution.
Zestaw danych oraz TableAdapters są podzielone na dwa projekty bibliotek klasowych. Projekt, który pierwotnie zawierał cały zestaw danych (
DataAccessTier) zawiera teraz tylko elementy TableAdapters. Projekt wyznaczony we właściwości Projekt Zestawu danych (DataEntityTier) zawiera typowany zestaw danych: NorthwindDataSet.Dataset.Designer.vb (lub NorthwindDataSet.Dataset.Designer.cs).
Uwaga / Notatka
W przypadku oddzielenia zestawów danych i elementów TableAdapters (przez ustawienie właściwości Projektu Zestawu danych ) istniejące częściowe klasy zestawów danych w projekcie nie zostaną przeniesione automatycznie. Istniejące klasy częściowe zestawu danych muszą zostać ręcznie przeniesione do projektu zestawu danych.
Tworzenie nowej aplikacji usługi
W tym przewodniku pokazano, jak uzyskać dostęp do warstwy dostępu do danych przy użyciu usługi WCF, więc utwórzmy nową aplikację usługi WCF.
Aby utworzyć nową aplikację usługi WCF
Kliknij prawym przyciskiem myszy rozwiązanie w Eksploratorze rozwiązań i wybierz polecenie Dodaj>nowy projekt.
W oknie dialogowym Nowy projekt w okienku po lewej stronie wybierz pozycję WCF. W środkowym okienku wybierz pozycję Biblioteka usług WCF.
Nadaj projektowi nazwę DataService i wybierz przycisk OK.
Projekt DataService jest tworzony i dodawany do rozwiązania NTierWalkthrough.
Utwórz metody w warstwie dostępu do danych, aby zwrócić dane klientów i zamówień
Usługa danych musi wywołać dwie metody w warstwie dostępu do danych: GetCustomers i GetOrders. Te metody zwracają tabele Northwind Customers i Orders . Utwórz metody GetCustomers i GetOrders w projekcie DataAccessTier.
Aby utworzyć metodę w warstwie dostępu do danych, która zwraca tabelę Customers
W Eksploratorze rozwiązań kliknij dwukrotnie pozycję NorthwindDataset.xsd , aby otworzyć zestaw danych.
Kliknij prawym przyciskiem myszy pozycję CustomersTableAdapter i kliknij polecenie Dodaj zapytanie.
Na stronie Wybieranie typu polecenia pozostaw domyślną wartość Użyj instrukcji SQL i kliknij przycisk Dalej.
Na stronie Wybieranie typu zapytania pozostaw wartość domyślnąSELECT, która zwraca wiersze , a następnie kliknij przycisk Dalej.
Na stronie Określanie instrukcji SQL SELECT pozostaw domyślne zapytanie i kliknij przycisk Dalej.
Na stronie Wybieranie metod do wygenerowania wpisz GetCustomers jako nazwę metody w sekcji Return a DataTable (Zwracanie tabeli danych).
Kliknij przycisk Finish (Zakończ).
Aby utworzyć metodę w warstwie dostępu do danych, która zwraca tabelę Orders
Kliknij prawym przyciskiem myszy pozycję OrdersTableAdapter i kliknij polecenie Dodaj zapytanie.
Na stronie Wybieranie typu polecenia pozostaw domyślną wartość Użyj instrukcji SQL i kliknij przycisk Dalej.
Na stronie Wybieranie typu zapytania pozostaw wartość domyślnąSELECT, która zwraca wiersze , a następnie kliknij przycisk Dalej.
Na stronie Określanie instrukcji SQL SELECT pozostaw domyślne zapytanie i kliknij przycisk Dalej.
Na stronie Wybieranie metod do wygenerowania wpisz GetOrders jako nazwę metody w sekcji Return a DataTable (Zwracanie tabeli danych).
Kliknij przycisk Finish (Zakończ).
W menu Kompilacja kliknij pozycję Kompiluj rozwiązanie.
Dodaj odniesienie do jednostki danych oraz poziomów dostępu do danych w usłudze danych
Ponieważ usługa danych wymaga informacji z zestawu danych i elementów TableAdapters, dodaj odwołania do projektów DataEntityTier i DataAccessTier .
Aby dodać odwołania do usługi danych
Kliknij prawym przyciskiem myszy pozycję DataService w Eksploratorze rozwiązań i kliknij pozycję Dodaj odwołanie.
Kliknij kartę Projekty w oknie dialogowym Dodawanie odwołania .
Wybierz projekty DataAccessTier i DataEntityTier .
Kliknij przycisk OK.
Dodawanie funkcji do usługi w celu wywoływania metod GetCustomers i GetOrders w warstwie dostępu do danych
Teraz, gdy warstwa dostępu do danych zawiera metody zwracania danych, utwórz metody w usłudze danych w celu wywołania metod w warstwie dostępu do danych.
Uwaga / Notatka
W przypadku projektów języka C# należy dodać odwołanie do System.Data.DataSetExtensions zestawu, aby skompilować poniższy kod.
Aby utworzyć funkcje GetCustomers i GetOrders w usłudze danych
W projekcie DataService kliknij dwukrotnie IService1.vb lub IService1.cs.
Dodaj następujący kod pod komentarzem Dodaj operacje usługi tutaj:
[OperationContract] DataEntityTier.NorthwindDataSet.CustomersDataTable GetCustomers(); [OperationContract] DataEntityTier.NorthwindDataSet.OrdersDataTable GetOrders();Uwaga / Notatka
Kod tego samouczka jest dostępny w językach C# i Visual Basic. Aby przełączyć język kodu na tej stronie między językami C# i Visual Basic, użyj przełącznika języka kodu w górnej części strony po prawej stronie.
W projekcie DataService kliknij dwukrotnie Service1.vb (lub Service1.cs).
Dodaj następujący kod do klasy Service1 :
public DataEntityTier.NorthwindDataSet.CustomersDataTable GetCustomers() { DataAccessTier.NorthwindDataSetTableAdapters.CustomersTableAdapter CustomersTableAdapter1 = new DataAccessTier.NorthwindDataSetTableAdapters.CustomersTableAdapter(); return CustomersTableAdapter1.GetCustomers(); } public DataEntityTier.NorthwindDataSet.OrdersDataTable GetOrders() { DataAccessTier.NorthwindDataSetTableAdapters.OrdersTableAdapter OrdersTableAdapter1 = new DataAccessTier.NorthwindDataSetTableAdapters.OrdersTableAdapter(); return OrdersTableAdapter1.GetOrders(); }W menu Kompilacja kliknij pozycję Kompiluj rozwiązanie.
Tworzenie warstwy prezentacji do wyświetlania danych z usługi danych
Teraz, gdy rozwiązanie zawiera usługę danych zawierającą metody, które powodują wywołanie warstwy dostępu do danych, utwórz kolejny projekt, który wywołuje usługę danych i przedstawi dane użytkownikom. W tym przewodniku utwórz aplikację Windows Forms; jest to warstwa prezentacji aplikacji n-warstwowej.
Aby utworzyć projekt dotyczący warstwy prezentacyjnej
Kliknij prawym przyciskiem myszy rozwiązanie w Eksploratorze rozwiązań i wybierz polecenie Dodaj>nowy projekt.
W oknie dialogowym Nowy projekt w okienku po lewej stronie wybierz pozycję Pulpit systemu Windows. W środkowym okienku wybierz pozycję Aplikacja formularzy systemu Windows.
Nadaj projektowi nazwę PresentationTier i kliknij przycisk OK.
Projekt PresentationTier jest tworzony i dodawany do rozwiązania NTierWalkthrough.
Ustawianie projektu PresentationTier jako projektu startowego
Ustawimy projekt PresentationTier jako projekt startowy dla rozwiązania, ponieważ jest to rzeczywista aplikacja kliencka, która przedstawia dane i wchodzi w interakcje z nimi.
Aby ustawić nowy projekt w warstwie prezentacji jako projekt startowy
- W Eksploratorze rozwiązań kliknij prawym przyciskiem myszy pozycję PresentationTier i kliknij polecenie Ustaw jako projekt startowy.
Dodawanie odwołań do warstwy prezentacji
Aplikacja kliencka PresentationTier wymaga odwołania do usługi danych w celu uzyskania dostępu do metod w usłudze. Ponadto wymagane jest odwołanie do zestawu danych w celu włączenia udostępniania typów przez usługę WCF. Dopóki nie włączysz udostępniania typów za pośrednictwem usługi danych, kod dodany do częściowej klasy zestawu danych nie będzie dostępny dla warstwy prezentacji. Ponieważ zazwyczaj dodajesz kod, taki jak kod weryfikacyjny, do zdarzeń zmiany wiersza i kolumny w tabeli danych, prawdopodobnie będziesz chciał uzyskać do niego dostęp po stronie klienta.
Aby dodać odwołanie do warstwy prezentacji
W Eksploratorze rozwiązań kliknij prawym przyciskiem myszy pozycję PresentationTier i wybierz pozycję Dodaj odwołanie.
W oknie dialogowym Dodawanie odwołania wybierz kartę Projekty .
Wybierz pozycję DataEntityTier i wybierz przycisk OK.
Aby dodać odniesienie do usługi w warstwie prezentacji
W Eksploratorze rozwiązań kliknij prawym przyciskiem myszy pozycję PresentationTier i wybierz pozycję Dodaj odwołanie do usługi.
W oknie dialogowym Dodawanie odwołania do usługi wybierz pozycję Odnajdź.
Wybierz pozycję Service1 i wybierz przycisk OK.
Uwaga / Notatka
Jeśli masz wiele usług na bieżącym komputerze, wybierz usługę utworzoną wcześniej w tym przewodniku (usługę zawierającą metody
GetCustomersiGetOrders).
Dodawanie elementu DataGridViews do formularza w celu wyświetlenia danych zwracanych przez usługę danych
Po dodaniu odwołania do usługi danych okno Źródła danych zostanie automatycznie wypełnione danymi zwracanymi przez usługę.
Aby dodać dwa powiązane dane DataGridViews do formularza
W Eksploratorze rozwiązań wybierz projekt PresentationTier .
W oknie Źródła danych rozwiń węzeł NorthwindDataSet i znajdź węzeł Klienci .
Przeciągnij węzeł Klienci na Form1.
W oknie Źródła danych rozwiń węzeł Klienci i znajdź powiązany węzeł Zamówienia (węzeł Zamówienia zagnieżdżony w węźle Klienci).
Przeciągnij powiązany węzeł Orders (Zamówienia) na Form1.
Utwórz procedurę obsługi zdarzeń
Form1_Load, klikając dwukrotnie pusty obszar formularza.Dodaj następujący kod do programu obsługi zdarzeń
Form1_Load.
Zwiększ maksymalny rozmiar komunikatu dozwolony przez usługę
Wartość domyślna parametru maxReceivedMessageSize nie jest wystarczająco duża, aby przechowywać dane pobrane z Customers tabel i Orders . W poniższych krokach zwiększysz wartość do 6553600. Zmieniasz wartość na kliencie, która automatycznie aktualizuje odwołanie do usługi.
Uwaga / Notatka
Niższy rozmiar domyślny ma na celu ograniczenie narażenia na ataki typu "odmowa usługi" (DoS). Aby uzyskać więcej informacji, zobacz MaxReceivedMessageSize.
Aby zwiększyć wartość maxReceivedMessageSize
W Eksploratorze rozwiązań kliknij dwukrotnie plik app.config w projekcie PresentationTier .
Znajdź atrybut maxReceivedMessageSize i zmień wartość na
6553600. Jeśli nie widziszbasicHttpBindingwpisu, dodaj go tak jak w poniższym przykładzie:<system.serviceModel> <bindings> <basicHttpBinding> <binding maxBufferSize="6553600" maxReceivedMessageSize="6553600" /> </basicHttpBinding> </bindings> </system.serviceModel>
Testowanie aplikacji
Uruchom aplikację, naciskając F5. Dane z tabel Customers i Orders są pobierane z usługi danych i wyświetlane w formularzu.
Dalsze kroki
W zależności od wymagań aplikacji istnieje kilka kroków, które można wykonać po zapisaniu powiązanych danych w aplikacji opartej na systemie Windows. Można na przykład wprowadzić następujące ulepszenia w tej aplikacji:
Dodaj walidację do zestawu danych.
Dodaj do usługi dodatkowe metody aktualizowania danych z powrotem do bazy danych.