Vytvoření vrstvy přístupu k datům (VB)
Scott Mitchell
V tomto kurzu začneme od samého začátku a vytvoříme vrstvu přístupu k datům (DAL) pomocí typed DataSets pro přístup k informacím v databázi.
Úvod
Jako vývojáři webu se naše životy týkají práce s daty. Vytváříme databáze pro ukládání dat, kódu pro jejich načtení a úpravu a webových stránek, které je budou shromažďovat a sumarizovat. Toto je první kurz dlouhé série, který prozkoumá techniky pro implementaci těchto běžných vzorů v ASP.NET 2.0. Začneme vytvořením softwarové architektury složené z vrstvy DAL (Data Access Layer) pomocí typed DataSets, BLL (Business Logic Layer), která vynucuje vlastní obchodní pravidla, a prezentační vrstvu složenou z ASP.NET stránek, které sdílejí společné rozložení stránky. Po vytvoření této back-endové práce přejdeme do vytváření sestav, ukážeme si, jak zobrazit, shrnout, shromažďovat a ověřovat data z webové aplikace. Tyto kurzy jsou zaměřené na stručné a poskytují podrobné pokyny s mnoha snímky obrazovky, které vás provedou vizuálně procesem. Každý kurz je k dispozici ve verzích C# a Visual Basic a zahrnuje stažení celého použitého kódu. (Tento první kurz je poměrně zdlouhavý, ale zbytek se prezentuje v mnohem čitelnějších blocích.)
V těchto kurzech budeme používat verzi Microsoft SQL Serveru 2005 Express Edition databáze Northwind umístěné v App_Data
adresáři. Kromě souboru App_Data
databáze obsahuje složka také skripty SQL pro vytvoření databáze pro případ, že chcete použít jinou verzi databáze. Pokud používáte jinou verzi SQL Serveru databáze Northwind, budete muset aktualizovat NORTHWNDConnectionString
nastavení v souboru aplikace Web.config
. Webová aplikace byla vytvořena pomocí sady Visual Studio 2005 Professional Edition jako projektu webu založeného na systému souborů. Všechny kurzy ale budou fungovat stejně dobře s bezplatnou verzí sady Visual Studio 2005, Visual Web Developer.
V tomto kurzu začneme od samého začátku a vytvoříme vrstvu přístupu k datům (DAL), po které v druhém kurzu vytvoříme vrstvu obchodní logiky (BLL) a budeme pracovat na rozložení stránky a navigaci ve třetí části. Kurzy po třetí se budou stavět na základech stanovených v prvních třech. V tomto prvním kurzu toho máme hodně na pokrytí, takže zahajte Visual Studio a pojďme začít!
Krok 1: Vytvoření webového projektu a připojení k databázi
Než budeme moct vytvořit vrstvu přístupu k datům (DAL), musíme nejprve vytvořit web a nastavit databázi. Začněte vytvořením nového webu založeného na systému souborů ASP.NET. Provedete to tak, že přejdete do nabídky Soubor a zvolíte Nový web a zobrazí se dialogové okno Nový web. Zvolte šablonu webu ASP.NET, nastavte rozevírací seznam Umístění na Systém souborů, zvolte složku pro umístění webu a nastavte jazyk na Visual Basic.
Obrázek 1: Vytvoření nového webu založeného na systému souborů (kliknutím zobrazíte obrázek s plnou velikostí)
Tím se vytvoří nový web se stránkou Default.aspx
ASP.NET, složkou App_Data
a souborem Web.config
.
Po vytvoření webu je dalším krokem přidání odkazu na databázi v Průzkumníku serveru sady Visual Studio. Přidáním databáze do Průzkumníka serveru můžete v sadě Visual Studio přidávat tabulky, uložené procedury, zobrazení atd. Data tabulky můžete také zobrazit nebo vytvořit vlastní dotazy ručně nebo graficky prostřednictvím Tvůrce dotazů. Kromě toho když sestavíme datové sady typed pro DAL, budeme muset visual Studio nasměrovat na databázi, ze které by se měly vytvořit datové sady Typed. I když můžeme poskytnout tyto informace o připojení v tomto okamžiku, Sada Visual Studio automaticky naplní rozevírací seznam databází, které jsou již zaregistrované v Průzkumníku serveru.
Postup přidání databáze Northwind do Průzkumníka serveru závisí na tom, jestli chcete použít databázi SQL Serveru 2005 Express Edition ve App_Data
složce nebo pokud máte nastavení databázového serveru Microsoft SQL Server 2000 nebo 2005, který chcete použít.
Použití databáze veApp_Data
složce
Pokud nemáte k připojení databázový server SQL Server 2000 nebo 2005 nebo chcete se jednoduše vyhnout přidání databáze na databázový server, můžete použít verzi SQL Serveru 2005 Express Edition databáze Northwind, která se nachází ve složce staženého webu App_Data
(NORTHWND.MDF
).
Databáze umístěná App_Data
ve složce se automaticky přidá do Průzkumníka serveru. Za předpokladu, že máte na počítači nainstalovaný SQL Server 2005 Express Edition, měl by se zobrazit uzel s názvem NORTHWND. MDF v Průzkumníku serveru, který můžete rozbalit a prozkoumat jeho tabulky, zobrazení, uloženou proceduru atd. (viz obrázek 2).
Složka App_Data
může obsahovat také soubory Microsoft Accessu .mdb
, které se jako jejich protějšky SQL Serveru automaticky přidají do Průzkumníka serveru. Pokud nechcete používat žádnou z možností SQL Serveru, můžete vždy nainstalovat databázi a aplikace Northwind Traders a umístit je App_Data
do adresáře. Mějte ale na paměti, že accessové databáze nejsou tak bohaté na funkce jako SQL Server a nejsou navržené tak, aby se používaly ve scénářích webu. Kromě toho několik kurzů s 35+ využívá určité funkce na úrovni databáze, které Access nepodporuje.
Připojení k databázi na databázovém serveru Microsoft SQL Server 2000 nebo 2005
Případně se můžete připojit k databázi Northwind nainstalované na databázovém serveru. Pokud databázový server ještě nemá nainstalovanou databázi Northwind, musíte ji nejprve přidat do databázového serveru spuštěním instalačního skriptu, který je součástí stahování tohoto kurzu.
Jakmile máte databázi nainstalovanou, přejděte v sadě Visual Studio do Průzkumníka serveru, klikněte pravým tlačítkem na uzel Datové připojení a zvolte Přidat připojení. Pokud průzkumníka serveru nevidíte, přejděte do zobrazení nebo Průzkumníka serveru nebo stiskněte Kombinaci kláves Ctrl+Alt+S. Tím se zobrazí dialogové okno Přidat připojení, kde můžete zadat server, ke kterému se má připojit, ověřovací informace a název databáze. Jakmile úspěšně nakonfigurujete informace o připojení k databázi a kliknete na tlačítko OK, databáze se přidá jako uzel pod uzlem Datové připojení. Uzel databáze můžete rozšířit a prozkoumat jeho tabulky, zobrazení, uložené procedury atd.
Obrázek 2: Přidání připojení k databázi Northwind vašeho databázového serveru
Krok 2: Vytvoření vrstvy přístupu k datům
Při práci s daty je jednou z možností vložit logiku specifickou pro data přímo do prezentační vrstvy (ve webové aplikaci tvoří ASP.NET stránky prezentační vrstvu). To může mít formu psaní ADO.NET kódu v části kódu stránky ASP.NET nebo pomocí ovládacího prvku SqlDataSource z revizní části. V obou případech tento přístup úzce páruje logiku přístupu k datům s prezentační vrstvou. Doporučeným přístupem je ale oddělit logiku přístupu k datům od prezentační vrstvy. Tato samostatná vrstva se označuje jako vrstva přístupu k datům, zkratka DAL a obvykle se implementuje jako samostatný projekt knihovny tříd. Výhody této vrstvené architektury jsou dobře zdokumentované (viz část Další čtení na konci tohoto kurzu, kde najdete informace o těchto výhodách) a je to přístup, který v této sérii použijeme.
Veškerý kód, který je specifický pro podkladový zdroj dat, například vytvoření připojení k databázi, vydávání SELECT
, INSERT
UPDATE
, a DELETE
příkazů atd., by se měl nacházet v DAL. Prezentační vrstva by neměla obsahovat žádné odkazy na takový kód pro přístup k datům, ale měla by místo toho provádět volání do DAL pro jakékoli a všechny žádosti o data. Vrstvy přístupu k datům obvykle obsahují metody pro přístup k podkladovým databázovým datům. Například databáze Northwind má Products
a Categories
tabulky, které zaznamenávají produkty k prodeji a kategorie, do kterých patří. V naší DAL budeme mít metody jako:
GetCategories(),
která vrátí informace o všech kategoriích.GetProducts()
, který vrátí informace o všech produktechGetProductsByCategoryID(categoryID)
, který vrátí všechny produkty, které patří do zadané kategorieGetProductByProductID(productID)
, který vrátí informace o konkrétním produktu
Tyto metody se při vyvolání připojí k databázi, vydá příslušný dotaz a vrátí výsledky. Jak tyto výsledky vrátíme, je důležité. Tyto metody mohou jednoduše vrátit DataSet nebo DataReader naplněné databázovým dotazem, ale v ideálním případě by tyto výsledky měly být vráceny pomocí objektů silného typu. Objekt silného typu je objekt, jehož schéma je pevně definováno v době kompilace, zatímco opačný, volně typovaný objekt, je jeden, jehož schéma není známo, dokud modul runtime.
Například DataReader a DataSet (ve výchozím nastavení) jsou volně typované objekty, protože jejich schéma je definováno sloupci vrácenými databázovým dotazem použitým k naplnění. Pro přístup ke konkrétnímu sloupci z volně napsané tabulky DataTable musíme použít syntaxi jako: DataTable.Rows(index)("columnName")
. Volný typ DataTable v tomto příkladu je vystaven skutečností, že potřebujeme získat přístup k názvu sloupce pomocí řetězcového nebo pořadového indexu. DataTable silného typu na druhé straně bude mít každý z jeho sloupců implementovaný jako vlastnosti, což vede k kódu, který vypadá takto: DataTable.Rows(index).columnName
.
Pokud chcete vrátit objekty se silnými typy, můžou vývojáři buď vytvořit vlastní obchodní objekty, nebo použít typové datové sady. Obchodní objekt je implementován vývojářem jako třída, jejíž vlastnosti obvykle odrážejí sloupce podkladové databázové tabulky, kterou obchodní objekt představuje. Typed DataSet je třída vygenerovaná sadou Visual Studio na základě schématu databáze a jejich členy jsou silně typovány podle tohoto schématu. Typová datová sada se skládá z tříd, které rozšiřují ADO.NET DataSet, DataTable a DataRow třídy. Kromě tabulek DataTables se silnými typy teď obsahují také objekty TableAdapter, což jsou třídy s metodami pro naplnění datových tabulek DataSet a šíření úprav v rámci DataTables zpět do databáze.
Poznámka:
Další informace o výhodách a nevýhodách použití typed DataSets oproti vlastním obchodním objektům najdete v tématu Návrh komponent datové vrstvy a předávání datových vrstev.
Pro architekturu těchto kurzů použijeme datové sady se silnými typy. Obrázek 3 znázorňuje pracovní postup mezi různými vrstvami aplikace, které používají typové datové sady.
Obrázek 3: Veškerý kód pro přístup k datům je přelegován na dal (kliknutím zobrazíte obrázek plné velikosti)
Vytvoření typové datové sady a adaptéru tabulky
Začneme tím, že do projektu přidáme typovou datovou sadu. Chcete-li toho dosáhnout, klikněte pravým tlačítkem myši na uzel projektu v Průzkumník řešení a zvolte Přidat novou položku. V seznamu šablon vyberte možnost DataSet a pojmenujte ji Northwind.xsd
.
Obrázek 4: Volba přidání nové datové sady do projektu (kliknutím zobrazíte obrázek s plnou velikostí)
Po kliknutí na Přidat po zobrazení výzvy k přidání datové sady do App_Code
složky zvolte Ano. Zobrazí se Návrhář pro Typová datová sada a spustí se Průvodce konfigurací TableAdapter, který umožňuje přidat první TableAdapter do typové datové sady.
Typová datová sada slouží jako kolekce dat silného typu; skládá se z instancí DataTable silného typu, z nichž každá se zase skládá ze silně typed DataRow instancí. Vytvoříme datovou tabulku silného typu pro každou z podkladových databázových tabulek, se kterou musíme pracovat v této sérii kurzů. Začněme vytvořením tabulky DataTable Products
.
Mějte na paměti, že datové tabulky se silnými typy neobsahují žádné informace o přístupu k datům z podkladové databázové tabulky. Abychom mohli načíst data k naplnění tabulky DataTable, používáme třídu TableAdapter, která funguje jako vrstva přístupu k datům. V případě tabulky Products
DataTable bude Objekt TableAdapter obsahovat metody GetProducts()
, GetProductByCategoryID(categoryID)
a tak dále, které vyvoláme z prezentační vrstvy. Role DataTable slouží jako objekty silného typu používané k předávání dat mezi vrstvami.
Průvodce konfigurací TableAdapter začíná výzvou k výběru databáze, se kterou chcete pracovat. V rozevíracím seznamu se tyto databáze zobrazují v Průzkumníku serveru. Pokud jste databázi Northwind nepřidali do Průzkumníka serveru, můžete to provést kliknutím na tlačítko Nové připojení.
Obrázek 5: Volba databáze Northwind z rozevíracího seznamu (kliknutím zobrazíte obrázek v plné velikosti)
Po výběru databáze a kliknutí na Další se zobrazí dotaz, jestli chcete uložit připojovací řetězec do Web.config
souboru. Uložením připojovací řetězec nebudete mít pevně zakódované třídy TableAdapter, což zjednodušuje věci, pokud se připojovací řetězec informace v budoucnu změní. Pokud se rozhodnete uložit připojovací řetězec do konfiguračního souboru, který je umístěný v oddílu<connectionStrings>
, který můžete volitelně zašifrovat pro lepší zabezpečení nebo upravit později prostřednictvím nové stránky vlastností ASP.NET 2.0 v nástroji pro správu grafického uživatelského rozhraní služby IIS, což je vhodnější pro správce.
Obrázek 6: Uložení připojovacího řetězce do Web.config
(kliknutím zobrazíte obrázek s plnou velikostí)
Dále musíme definovat schéma pro první datovou tabulku se silnými typy a poskytnout první metodu pro objekt TableAdapter, který se má použít při naplnění datové sady se silnými typy. Tyto dva kroky se provádějí současně vytvořením dotazu, který vrátí sloupce z tabulky, kterou chceme promítnout do tabulky DataTable. Na konci průvodce dáme tomuto dotazu název metody. Po dosažení této metody je možné tuto metodu vyvolat z naší prezentační vrstvy. Metoda spustí definovaný dotaz a naplní tabulku DataTable se silnými typy.
Abychom mohli začít definovat dotaz SQL, musíme nejprve indikovat, jak má tableAdapter vydat dotaz. Můžeme použít příkaz SQL ad hoc, vytvořit novou uloženou proceduru nebo použít existující uloženou proceduru. V těchto kurzech použijeme ad hoc příkazy SQL.
Obrázek 7: Dotazování dat pomocí příkazu AD Hoc SQL (kliknutím zobrazíte obrázek s plnou velikostí)
V tuto chvíli můžeme zadat dotaz SQL ručně. Při vytváření první metody v Objektu TableAdapter obvykle chcete, aby dotaz vrátil ty sloupce, které musí být vyjádřeny v odpovídající DataTable. Toho můžeme dosáhnout vytvořením dotazu, který vrátí všechny sloupce a všechny řádky z Products
tabulky:
Obrázek 8: Zadání dotazu SQL do textového pole (kliknutím zobrazíte obrázek v plné velikosti)
Případně můžete použít Tvůrce dotazů a graficky sestavit dotaz, jak je znázorněno na obrázku 9.
Obrázek 9: Vytvoření dotazu graficky prostřednictvím Editor Power Query (kliknutím zobrazíte obrázek v plné velikosti)
Po vytvoření dotazu, ale před přechodem na další obrazovku klikněte na tlačítko Upřesnit možnosti. V projektech webů je jedinou rozšířenou možností vybranou ve výchozím nastavení příkaz Generovat příkaz Vložit, Aktualizovat a Delete; Pokud spustíte tohoto průvodce z knihovny tříd nebo projektu systému Windows, vybere se také možnost Použít optimistickou souběžnost. Prozatím nechte zaškrtnuté políčko Použít optimistickou souběžnost. V budoucích kurzech prozkoumáme optimistickou souběžnost.
Obrázek 10: Vyberte možnost Generovat pouze příkazy Vložit, Aktualizovat a Odstranit (kliknutím zobrazíte obrázek v plné velikosti).
Po ověření upřesňujících možností pokračujte kliknutím na další obrazovku. Zde jsme požádáni, abychom vybrali, které metody se mají přidat do objektu TableAdapter. Pro naplnění dat existují dva vzory:
- Vyplňte tabulku DataTable tímto přístupem metodou, která přebírá dataTable jako parametr a naplní ji na základě výsledků dotazu. ADO.NET DataAdapter třída, například implementuje tento vzor s jeho
Fill()
metodou. - Vrátí dataTable tímto přístupem metoda vytvoří a vyplní dataTable za vás a vrátí ji jako návratovou hodnotu metod.
TableAdapter může implementovat jeden nebo oba tyto vzory. Zde uvedené metody můžete také přejmenovat. Ponecháme obě políčka zaškrtnutá, i když v těchto kurzech budeme používat pouze druhý vzor. Přejmenujme také spíše obecnou GetData
metodu na GetProducts
.
Pokud je zaškrtnuté, konečné zaškrtávací políčko GenerateDBDirectMethods, vytvoří Insert()
Update()
, a Delete()
metody pro TableAdapter. Pokud tuto možnost ponecháte nezaškrtnutou, bude nutné všechny aktualizace provést pouze pomocí jediné Update()
metody TableAdapter, která přebírá Typová datová sada, DataTable, jeden DataRow nebo pole DataRows. (Pokud jste nezaškrtli políčko Generovat příkazy Vložit, Aktualizovat a Odstranit z upřesňujících vlastností na obrázku 9, nastavení tohoto zaškrtávacího políčka nebude mít žádný vliv.) Toto políčko ponecháme zaškrtnuté.
Obrázek 11: Změna názvu metody z GetData
na GetProducts
(kliknutím zobrazíte obrázek s plnou velikostí)
Dokončete průvodce kliknutím na Dokončit. Po zavření průvodce se vrátíme do Návrháře datových sad, který zobrazuje tabulku DataTable, kterou jsme právě vytvořili. Seznam sloupců můžete zobrazit v tabulce Products
DataTable (ProductID
, ProductName
a tak dále), stejně jako metody ProductsTableAdapter
(Fill()
a GetProducts()
).
Obrázek 12: Products
Tabulka DataTable a ProductsTableAdapter
byla přidána do typové datové sady (kliknutím zobrazíte obrázek s plnou velikostí)
V tomto okamžiku máme Datovou sadu typu s jednou DataTable (Northwind.Products
) a třídy DataAdapter silného typu (NorthwindTableAdapters.ProductsTableAdapter
) s metodou GetProducts()
. Tyto objekty lze použít pro přístup k seznamu všech produktů z kódu, například:
Dim productsAdapter As New NorthwindTableAdapters.ProductsTableAdapter()
Dim products as Northwind.ProductsDataTable
products = productsAdapter.GetProducts()
For Each productRow As Northwind.ProductsRow In products
Response.Write("Product: " & productRow.ProductName & "<br />")
Next
Tento kód nepožadoval, abychom napsali jeden bit kódu specifického pro přístup k datům. Nemuseli jsme vytvořit instanci žádné třídy ADO.NET, nemuseli jsme odkazovat na žádné připojovací řetězec, dotazy SQL ani uložené procedury. Místo toho poskytuje TableAdapter kód přístupu k datům nízké úrovně.
Každý objekt použitý v tomto příkladu je také silně napsaný a umožňuje sadě Visual Studio poskytovat intelliSense a kontrolu typů kompilace. A nejlepší ze všech datových tabulek vrácených Objekty TableAdapter mohou být vázány na ASP.NET webové ovládací prvky, jako jsou GridView, DetailsView, DropDownList, CheckBoxList a několik dalších. Následující příklad znázorňuje vazbu DataTable vrácenou metodou GetProducts()
na GridView pouze skenované tři řádky kódu v rámci obslužné rutiny Page_Load
události.
AllProducts.aspx
<%@ Page Language="VB" AutoEventWireup="true" CodeFile="AllProducts.aspx.vb"
Inherits="AllProducts" %>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" >
<head runat="server">
<title>View All Products in a GridView</title>
<link href="Styles.css" rel="stylesheet" type="text/css" />
</head>
<body>
<form id="form1" runat="server">
<div>
<h1>
All Products</h1>
<p>
<asp:GridView ID="GridView1" runat="server"
CssClass="DataWebControlStyle">
<HeaderStyle CssClass="HeaderStyle" />
<AlternatingRowStyle CssClass="AlternatingRowStyle" />
</asp:GridView>
</p>
</div>
</form>
</body>
</html>
AllProducts.aspx.vb
Imports NorthwindTableAdapters
Partial Class AllProducts
Inherits System.Web.UI.Page
Protected Sub Page_Load(ByVal sender As Object, ByVal e As System.EventArgs) _
Handles Me.Load
Dim productsAdapter As New ProductsTableAdapter
GridView1.DataSource = productsAdapter.GetProducts()
GridView1.DataBind()
End Sub
End Class
Obrázek 13: Seznam produktů se zobrazí v objektu GridView (kliknutím zobrazíte obrázek v plné velikosti).
I když tento příklad vyžadoval, abychom do obslužné rutiny události stránky Page_Load
ASP.NET napsali tři řádky kódu, v budoucích kurzech prozkoumáme, jak pomocí ObjectDataSource deklarativní načtení dat z DAL. S ObjectDataSource nebudeme muset napsat žádný kód a získáme také podporu stránkování a řazení!
Krok 3: Přidání parametrizovaných metod do vrstvy přístupu k datům
V tuto chvíli má naše ProductsTableAdapter
třída ale jednu metodu, GetProducts()
která vrací všechny produkty v databázi. I když je schopnost pracovat se všemi produkty, je určitě užitečné, existují chvíle, kdy budeme chtít načíst informace o konkrétním produktu nebo všechny produkty, které patří do konkrétní kategorie. Abychom mohli tyto funkce přidat do vrstvy přístupu k datům, můžeme do objektu TableAdapter přidat parametrizované metody.
Pojďme přidat metodu GetProductsByCategoryID(categoryID)
. Pokud chcete do DAL přidat novou metodu, vraťte se do Návrháře datové sady, klikněte pravým tlačítkem myši v ProductsTableAdapter
části a zvolte Přidat dotaz.
Obrázek 14: Klikněte pravým tlačítkem myši na tableAdapter a zvolte Přidat dotaz.
Nejdřív se zobrazí výzva, jestli chceme získat přístup k databázi pomocí ad hoc příkazu SQL nebo nové nebo existující uložené procedury. Pojďme se znovu rozhodnout použít příkaz SQL ad hoc. Dále se zobrazí dotaz, jaký typ dotazu SQL chceme použít. Vzhledem k tomu, že chceme vrátit všechny produkty, které patří do zadané kategorie, chceme napsat SELECT
příkaz, který vrací řádky.
Obrázek 15: Volba vytvoření SELECT
příkazu, který vrátí řádky (kliknutím zobrazíte obrázek s plnou velikostí)
Dalším krokem je definování dotazu SQL použitého pro přístup k datům. Vzhledem k tomu, že chceme vrátit pouze ty produkty, které patří do určité kategorie, používám stejný SELECT
výrok od GetProducts()
, ale přidejte následující WHERE
klauzuli: WHERE CategoryID = @CategoryID
. Parametr @CategoryID
označuje průvodce TableAdapter, že metoda, kterou vytváříme, bude vyžadovat vstupní parametr odpovídajícího typu (konkrétně celé číslo s možnou hodnotou null).
Obrázek 16: Zadání dotazu pouze pro vrácení produktů v zadané kategorii (kliknutím zobrazíte obrázek s plnou velikostí)
V posledním kroku můžeme zvolit, které vzory přístupu k datům se mají použít, a také přizpůsobit názvy vygenerovaných metod. V případě vzoru Fill změníme název na FillByCategoryID
návratový vzor tabulky DataTable (metody GetX
), použijeme GetProductsByCategoryID
.
Obrázek 17: Volba názvů metod TableAdapter (kliknutím zobrazíte obrázek s plnou velikostí)
Po dokončení průvodce obsahuje Návrhář datové sady nové metody TableAdapter.
Obrázek 18: Produkty se teď dají dotazovat podle kategorie
Chvilku si přidejte metodu GetProductByProductID(productID)
pomocí stejné techniky.
Tyto parametrizované dotazy je možné testovat přímo z Návrháře datové sady. Klikněte pravým tlačítkem myši na metodu v tabulce TableAdapter a zvolte Náhled dat. Dále zadejte hodnoty, které chcete použít pro parametry, a klikněte na Náhled.
Obrázek 19: Tyto produkty patřící do kategorie Nápoje jsou zobrazeny (kliknutím zobrazíte obrázek plné velikosti)
S metodou GetProductsByCategoryID(categoryID)
v naší DAL teď můžeme vytvořit ASP.NET stránku, která zobrazuje pouze produkty v zadané kategorii. Následující příklad ukazuje všechny produkty, které jsou v kategorii Nápoje, které mají CategoryID
1.
Beverages.aspx
<%@ Page Language="VB" AutoEventWireup="true" CodeFile="Beverages.aspx.vb"
Inherits="Beverages" %>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" >
<head runat="server">
<title>Untitled Page</title>
<link href="Styles.css" rel="stylesheet" type="text/css" />
</head>
<body>
<form id="form1" runat="server">
<div>
<h1>Beverages</h1>
<p>
<asp:GridView ID="GridView1" runat="server"
CssClass="DataWebControlStyle">
<HeaderStyle CssClass="HeaderStyle" />
<AlternatingRowStyle CssClass="AlternatingRowStyle" />
</asp:GridView>
</p>
</div>
</form>
</body>
</html>
Beverages.aspx.vb
Imports NorthwindTableAdapters
Partial Class Beverages
Inherits System.Web.UI.Page
Protected Sub Page_Load(ByVal sender As Object, ByVal e As System.EventArgs) _
Handles Me.Load
Dim productsAdapter As New ProductsTableAdapter
GridView1.DataSource =
productsAdapter.GetProductsByCategoryID(1)
GridView1.DataBind()
End Sub
End Class
Obrázek 20: Tyto produkty v kategorii Nápoje se zobrazí (kliknutím zobrazíte obrázek v plné velikosti).
Krok 4: Vložení, aktualizace a odstranění dat
Existují dva vzory, které se běžně používají k vkládání, aktualizaci a odstraňování dat. První vzor, který zavolám přímý vzor databáze, zahrnuje vytvoření metod, které při vyvolání, vydání INSERT
UPDATE
, nebo DELETE
příkaz databáze, která pracuje s jedním záznamem databáze. Tyto metody se obvykle předávají v řadě skalárních hodnot (celá čísla, řetězce, logické hodnoty, DateTimes atd.), které odpovídají hodnotám pro vložení, aktualizaci nebo odstranění. Například s tímto vzorem Products
pro tabulku by metoda delete převzala celočíselnou parametr označující ProductID
záznam k odstranění, zatímco metoda insert vezme řetězec pro ProductName
, desetinné číslo UnitPrice
pro UnitsOnStock
a tak dále.
Obrázek 21: Každá žádost o vložení, aktualizaci a odstranění se odešle do databáze okamžitě (kliknutím zobrazíte obrázek v plné velikosti).
Dalším vzorem, který budu označovat jako vzor dávkové aktualizace, je aktualizace celé datové sady, DataTable nebo kolekce DataRows v jednom volání metody. S tímto vzorem vývojář odstraní, vloží a upraví DataRows v DataTable a pak tyto DataRows nebo DataTable předá do metody update. Tato metoda pak vyčíslí dataRows předané, určuje, zda byly změněny, přidány nebo odstraněny (prostřednictvím hodnoty vlastnosti RowState dataRow) a vydává odpovídající požadavek databáze pro každý záznam.
Obrázek 22: Všechny změny se synchronizují s databází při vyvolání metody aktualizace (kliknutím zobrazíte obrázek plné velikosti).
Objekt TableAdapter ve výchozím nastavení používá vzor dávkové aktualizace, ale podporuje také přímý vzor databáze. Vzhledem k tomu, že jsme při vytváření objektu TableAdapter vybrali možnost Generovat příkazy Insert, Update a Delete z rozšířených vlastností, ProductsTableAdapter
obsahuje metodu Update()
, která implementuje vzor dávkové aktualizace. Konkrétně TableAdapter obsahuje metodu Update()
, která může být předána Typed DataSet, silně typ DataTable nebo jeden nebo více DataRows. Pokud jste při prvním vytvoření objektu TableAdapter nechali políčko GenerateDBDirectMethods zaškrtnuté, bude také implementováno prostřednictvím Insert()
Update()
, a Delete()
metod.
Oba vzory úprav dat používají objekty TableAdapter InsertCommand
UpdateCommand
a DeleteCommand
vlastnosti k vydání jejich INSERT
, UPDATE
a DELETE
příkazy do databáze. Kliknutím na objekt TableAdapter v Návrháři datové sady a následným přechodem na okno Vlastnosti můžete zkontrolovat a upravit InsertCommand
UpdateCommand
DeleteCommand
vlastnosti . (Ujistěte se, že jste vybrali objekt TableAdapter a že ProductsTableAdapter
je objekt vybraný v rozevíracím seznamu v okno Vlastnosti.)
Obrázek 23: Objekt TableAdapter má InsertCommand
a UpdateCommand
DeleteCommand
vlastnosti (kliknutím zobrazíte obrázek s plnou velikostí)
Chcete-li prozkoumat nebo upravit některé z těchto vlastností příkazu databáze, klikněte na CommandText
dílčí vlastnost, která zobrazí Tvůrce dotazů.
Obrázek 24: Konfigurace příkazů a < UPDATE
a0/INSERT
> DELETE
v Tvůrci dotazů (kliknutím zobrazíte obrázek v plné velikosti)
Následující příklad kódu ukazuje, jak pomocí vzoru dávkové aktualizace zdvojnásobit cenu všech produktů, které nejsou ukončeny a které mají 25 jednotek skladem nebo méně:
Dim productsAdapter As New NorthwindTableAdapters.ProductsTableAdapter()
Dim products As Northwind.ProductsDataTable = productsAdapter.GetProducts()
For Each product As Northwind.ProductsRow In products
If Not product.Discontinued AndAlso product.UnitsInStock <= 25 Then
product.UnitPrice *= 2
End if
Next
productsAdapter.Update(products)
Následující kód ukazuje, jak pomocí modelu přímé databáze programově odstranit konkrétní produkt, pak ho aktualizovat a pak přidat nový:
Dim productsAdapter As New NorthwindTableAdapters.ProductsTableAdapter()
productsAdapter.Delete(3)
productsAdapter.Update( _
"Chai", 1, 1, "10 boxes x 20 bags", 18.0, 39, 15, 10, false, 1)
productsAdapter.Insert( _
"New Product", 1, 1, "12 tins per carton", 14.95, 15, 0, 10, false)
Vytváření vlastních metod vložení, aktualizace a odstranění
Insert()
, Update()
a Delete()
metody vytvořené přímou metodou DB mohou být trochu těžkopádné, zejména pro tabulky s mnoha sloupci. Když se podíváte na předchozí příklad kódu, bez intellisense to nepomůže, není zvlášť jasné, které Products
sloupce tabulky se mapují na každý vstupní parametr a Insert()
Update()
metody. Někdy může docházet k tomu, že chceme aktualizovat pouze jeden sloupec nebo dva sloupce nebo chtít přizpůsobenou Insert()
metodu, která například vrátí hodnotu pole nově vloženého záznamu IDENTITY
(automatické zvýšení).
Pokud chcete vytvořit takovou vlastní metodu, vraťte se do Návrháře datové sady. Klikněte pravým tlačítkem myši na TableAdapter a zvolte Přidat dotaz a vraťte se do průvodce TableAdapter. Na druhé obrazovce můžeme označit typ dotazu, který se má vytvořit. Pojďme vytvořit metodu, která přidá nový produkt a pak vrátí hodnotu nově přidaného záznamu ProductID
. Proto se můžete rozhodnout vytvořit INSERT
dotaz.
Obrázek 25: Vytvoření metody pro přidání nového řádku do Products
tabulky (kliknutím zobrazíte obrázek s plnou velikostí)
Na další obrazovce se InsertCommand
CommandText
zobrazí obrazovka. Rozšiřte tento dotaz přidáním SELECT SCOPE_IDENTITY()
na konec dotazu, který vrátí poslední hodnotu identity vloženou do IDENTITY
sloupce ve stejném oboru. (Další informace o SCOPE_IDENTITY()
@@IDENTITY najdete v technické dokumentaci a o tom, proč pravděpodobně chcete používat SCOPE_IDENTITY().) Před přidáním SELECT
příkazu nezapomeňte příkaz ukončit INSERT
středníkem.
Obrázek 26: Rozšíření dotazu na vrácení SCOPE_IDENTITY()
hodnoty (kliknutím zobrazíte obrázek s plnou velikostí)
Nakonec pojmenujte novou metodu InsertProduct
.
Obrázek 27: Nastavení názvu nové metody na InsertProduct
(kliknutím zobrazíte obrázek s plnou velikostí)
Když se vrátíte do Návrháře datové sady, uvidíte, že ProductsTableAdapter
obsahuje novou metodu, InsertProduct
. Pokud tato nová metoda nemá parametr pro každý sloupec v Products
tabulce, pravděpodobně jste zapomněli ukončit INSERT
příkaz středníkem. Nakonfigurujte metodu InsertProduct
a ujistěte se, že máte středník, který INSERT
odděluje příkazy a SELECT
příkazy.
Ve výchozím nastavení metody vložení vydávají metody bez dotazu metody, což znamená, že vracejí počet ovlivněných řádků. Chceme InsertProduct
však, aby metoda vrátila hodnotu vrácenou dotazem, nikoli počet ovlivněných řádků. Chcete-li toho dosáhnout, upravte InsertProduct
vlastnost metody ExecuteMode
na Scalar
.
Obrázek 28: Změna ExecuteMode
vlastnosti na Scalar
(Kliknutím zobrazíte obrázek v plné velikosti)
Následující kód ukazuje tuto novou InsertProduct
metodu v akci:
Dim productsAdapter As New NorthwindTableAdapters.ProductsTableAdapter()
Dim new_productID As Integer = Convert.ToInt32(productsAdapter.InsertProduct( _
"New Product", 1, 1, "12 tins per carton", 14.95, 10, 0, 10, false))
productsAdapter.Delete(new_productID)
Krok 5: Dokončení vrstvy přístupu k datům
Všimněte si, že ProductsTableAdapters
třída vrací CategoryID
hodnoty a SupplierID
hodnoty z Products
tabulky, ale nezahrnuje CategoryName
sloupec z Categories
tabulky nebo CompanyName
sloupce z Suppliers
tabulky, i když jsou to pravděpodobně sloupce, které chceme zobrazit při zobrazení informací o produktu. Můžeme rozšířit počáteční metodu TableAdapter, aby zahrnovala jak CategoryName
CompanyName
hodnoty sloupců, tak i hodnoty sloupců, které aktualizují dataTable silného typu tak, GetProducts()
aby zahrnovaly i tyto nové sloupce.
To však může představovat problém, protože metody TableAdapter pro vkládání, aktualizace a odstraňování dat jsou založeny na této počáteční metodě. Naštěstí nejsou automaticky generované metody vkládání, aktualizace a odstraňování ovlivněny poddotazy v SELECT
klauzuli. Když se postaráme o přidání dotazů do Categories
poddotazů Suppliers
a jako poddotazů, JOIN
nebudeme muset tyto metody pro úpravy dat přepracovat. Klikněte pravým tlačítkem myši na metodu GetProducts()
ProductsTableAdapter
a zvolte Konfigurovat. Potom klauzuli SELECT
upravte tak, aby vypadala takto:
SELECT ProductID, ProductName, SupplierID, CategoryID,
QuantityPerUnit, UnitPrice, UnitsInStock, UnitsOnOrder, ReorderLevel, Discontinued,
(SELECT CategoryName FROM Categories
WHERE Categories.CategoryID = Products.CategoryID) as CategoryName,
(SELECT CompanyName FROM Suppliers
WHERE Suppliers.SupplierID = Products.SupplierID) as SupplierName
FROM Products
Obrázek 29: Aktualizace SELECT
příkazu pro metodu GetProducts()
(kliknutím zobrazíte obrázek s plnou velikostí)
Po aktualizaci GetProducts()
metody pro použití tohoto nového dotazu dataTable bude obsahovat dva nové sloupce: CategoryName
a SupplierName
.
Obrázek 30: Datová Products
tabulka obsahuje dva nové sloupce
Chvilku SELECT
aktualizujte i klauzuli v GetProductsByCategoryID(categoryID)
metodě.
Pokud aktualizujete GetProducts()
SELECT
syntaxi pomocí JOIN
syntaxe DataSet Designer nebude moct automaticky vygenerovat metody pro vkládání, aktualizaci a odstraňování databázových dat pomocí přímého vzoru databáze. Místo toho je budete muset ručně vytvořit podobně jako v InsertProduct
předchozí části tohoto kurzu. Kromě toho budete muset ručně zadat InsertCommand
hodnoty , UpdateCommand
a DeleteCommand
vlastnosti, pokud chcete použít vzor dávkové aktualizace.
Přidání zbývajících objektů TableAdapter
Až doteď jsme se podívali jen na práci s jednou tabulkou TableAdapter pro jednu tabulku databáze. Databáze Northwind ale obsahuje několik souvisejících tabulek, se kterými budeme muset pracovat v naší webové aplikaci. Typová datová sada může obsahovat více souvisejících datových tabulek. Proto k dokončení naší DAL potřebujeme přidat datové tabulky pro ostatní tabulky, které budeme používat v těchto kurzech. Pokud chcete přidat nový TableAdapter do typové datové sady, otevřete Návrhář datové sady, klikněte pravým tlačítkem myši v Návrháři a zvolte Přidat / TableAdapter. Tím se vytvoří nová tabulka DataTable a TableAdapter a provede vás průvodcem, který jsme prozkoumali dříve v tomto kurzu.
Vytvoření následujících objektů TableAdapter a metod pomocí následujících dotazů zabere několik minut. Všimněte si, že dotazy v ProductsTableAdapter
zahrnutí poddotazů pro získání kategorií jednotlivých produktů a názvů dodavatelů. Pokud jste postupovali podle pokynů, přidali jste už ProductsTableAdapter
GetProducts()
metody a GetProductsByCategoryID(categoryID)
třídy.
ProductsTableAdapter
GetProducts:
SELECT ProductID, ProductName, SupplierID, CategoryID, QuantityPerUnit, UnitPrice, UnitsInStock, UnitsOnOrder, ReorderLevel, Discontinued, (SELECT CategoryName FROM Categories WHERE Categories.CategoryID = Products.CategoryID) as CategoryName, (SELECT CompanyName FROM Suppliers WHERE Suppliers.SupplierID = Products.SupplierID) as SupplierName FROM Products
GetProductsByCategoryID:
SELECT ProductID, ProductName, SupplierID, CategoryID, QuantityPerUnit, UnitPrice, UnitsInStock, UnitsOnOrder, ReorderLevel, Discontinued, (SELECT CategoryName FROM Categories WHERE Categories.CategoryID = Products.CategoryID) as CategoryName, (SELECT CompanyName FROM Suppliers WHERE Suppliers.SupplierID = Products.SupplierID) as SupplierName FROM Products WHERE CategoryID = @CategoryID
GetProductsBySupplierID:
SELECT ProductID, ProductName, SupplierID, CategoryID, QuantityPerUnit, UnitPrice, UnitsInStock, UnitsOnOrder, ReorderLevel, Discontinued, (SELECT CategoryName FROM Categories WHERE Categories.CategoryID = Products.CategoryID) as CategoryName, (SELECT CompanyName FROM Suppliers WHERE Suppliers.SupplierID = Products.SupplierID) as SupplierName FROM Products WHERE SupplierID = @SupplierID
GetProductByProductID:
SELECT ProductID, ProductName, SupplierID, CategoryID, QuantityPerUnit, UnitPrice, UnitsInStock, UnitsOnOrder, ReorderLevel, Discontinued, (SELECT CategoryName FROM Categories WHERE Categories.CategoryID = Products.CategoryID) as CategoryName, (SELECT CompanyName FROM Suppliers WHERE Suppliers.SupplierID = Products.SupplierID) as SupplierName FROM Products WHERE ProductID = @ProductID
CategoriesTableAdapter
GetCategories:
SELECT CategoryID, CategoryName, Description FROM Categories
GetCategoryByCategoryID:
SELECT CategoryID, CategoryName, Description FROM Categories WHERE CategoryID = @CategoryID
SuppliersTableAdapter
GetSuppliers:
SELECT SupplierID, CompanyName, Address, City, Country, Phone FROM Suppliers
GetSuppliersByCountry:
SELECT SupplierID, CompanyName, Address, City, Country, Phone FROM Suppliers WHERE Country = @Country
GetSupplierBySupplierID:
SELECT SupplierID, CompanyName, Address, City, Country, Phone FROM Suppliers WHERE SupplierID = @SupplierID
EmployeesTableAdapter
GetEmployees:
SELECT EmployeeID, LastName, FirstName, Title, HireDate, ReportsTo, Country FROM Employees
GetEmployeesByManager:
SELECT EmployeeID, LastName, FirstName, Title, HireDate, ReportsTo, Country FROM Employees WHERE ReportsTo = @ManagerID
GetEmployeeByEmployeeID:
SELECT EmployeeID, LastName, FirstName, Title, HireDate, ReportsTo, Country FROM Employees WHERE EmployeeID = @EmployeeID
Obrázek 31: Návrhář datové sady po přidání čtyř objektů TableAdapter (kliknutím zobrazíte obrázek s plnou velikostí)
Přidání vlastního kódu do DAL
Objekty TableAdapter a DataTables přidané do typové datové sady jsou vyjádřeny jako soubor definice schématu XML (Northwind.xsd
). Tyto informace o schématu můžete zobrazit tak, že kliknete pravým tlačítkem myši na Northwind.xsd
soubor v Průzkumník řešení a zvolíte Zobrazit kód.
Obrázek 32: Soubor definice schématu XML (XSD) pro datovou sadu typed Northwinds (Kliknutím zobrazíte obrázek s plnou velikostí)
Tyto informace o schématu se překládají do kódu jazyka C# nebo Visual Basic v době návrhu při kompilaci nebo za běhu (v případě potřeby), v jakém okamžiku je můžete procházet ladicím programem. Pokud chcete zobrazit tento automaticky generovaný kód, přejděte do zobrazení třídy a přejděte k podrobnostem na třídy TableAdapter nebo Typed DataSet. Pokud na obrazovce nevidíte zobrazení předmětu, přejděte do nabídky Zobrazení a vyberte ho tam nebo stiskněte Ctrl+Shift+C. V zobrazení třídy můžete zobrazit vlastnosti, metody a události Typed DataSet a TableAdapter třídy. Pokud chcete zobrazit kód konkrétní metody, poklikejte na název metody v zobrazení třídy nebo na něj klikněte pravým tlačítkem myši a zvolte Přejít na definici.
Obrázek 33: Kontrola automaticky generovaného kódu výběrem možnosti Přejít k definici ze zobrazení třídy
I když automaticky vygenerovaný kód může být skvělý časově úsporný, kód je často velmi obecný a je potřeba ho přizpůsobit tak, aby vyhovoval jedinečným potřebám aplikace. Riziko rozšíření automaticky generovaného kódu je ale to, že nástroj, který kód vygeneroval, se může rozhodnout, že je čas znovu vygenerovat a přepsat vlastní nastavení. S novým konceptem částečné třídy .NET 2.0 je snadné rozdělit třídu mezi více souborů. To nám umožňuje přidat do automaticky generovaných tříd vlastní metody, vlastnosti a události, aniž by se museli starat o přepsání vlastních nastavení sady Visual Studio.
Abychom si ukázali, jak přizpůsobit DAL, přidáme do třídy metodu GetProducts()
SuppliersRow
. Třída SuppliersRow
představuje jeden záznam v Suppliers
tabulce; každý dodavatel může zprostředkovatele nula na mnoho produktů, takže GetProducts()
vrátí tyto produkty zadaného dodavatele. Chcete-li toho dosáhnout, vytvořte nový soubor třídy ve App_Code
složce s názvem SuppliersRow.vb
a přidejte následující kód:
Imports NorthwindTableAdapters
Partial Public Class Northwind
Partial Public Class SuppliersRow
Public Function GetProducts() As Northwind.ProductsDataTable
Dim productsAdapter As New ProductsTableAdapter
Return productsAdapter.GetProductsBySupplierID(Me.SupplierID)
End Function
End Class
End Class
Tato částečná třída dává kompilátoru pokyn, aby při sestavování Northwind.SuppliersRow
třídy zahrnoval metodu GetProducts()
, kterou jsme právě definovali. Pokud projekt sestavíte a pak se vrátíte do zobrazení třídy, zobrazí GetProducts()
se nyní jako metoda Northwind.SuppliersRow
.
Obrázek 34: GetProducts()
Metoda je nyní součástí Northwind.SuppliersRow
třídy
Metodu GetProducts()
lze nyní použít k vytvoření výčtu sady produktů pro konkrétního dodavatele, jak ukazuje následující kód:
Dim suppliersAdapter As New NorthwindTableAdapters.SuppliersTableAdapter()
Dim suppliers As Northwind.SuppliersDataTable = suppliersAdapter.GetSuppliers()
For Each supplier As Northwind.SuppliersRow In suppliers
Response.Write("Supplier: " & supplier.CompanyName)
Response.Write("<ul>")
Dim products As Northwind.ProductsDataTable = supplier.GetProducts()
For Each product As Northwind.ProductsRow In products
Response.Write("<li>" & product.ProductName & "</li>")
Next
Response.Write("</ul><p> </p>")
Next
Tato data lze také zobrazit v libovolném asp. Webové ovládací prvky dat rozhraní NET Následující stránka používá ovládací prvek GridView se dvěma poli:
- A BoundField, který zobrazuje název každého dodavatele a
- TemplateField obsahující ovládací prvek BulletedList, který je vázán na výsledky vrácené metodou
GetProducts()
pro každého dodavatele.
V budoucích kurzech se podíváme, jak tyto hlavní sestavy zobrazit. Prozatím je tento příklad navržený tak, aby ilustroval použití vlastní metody přidané do Northwind.SuppliersRow
třídy.
SuppliersAndProducts.aspx
<%@ Page Language="VB" CodeFile="SuppliersAndProducts.aspx.vb"
AutoEventWireup="true" Inherits="SuppliersAndProducts" %>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" >
<head runat="server">
<title>Untitled Page</title>
<link href="Styles.css" rel="stylesheet" type="text/css" />
</head>
<body>
<form id="form1" runat="server">
<div>
<h1>
Suppliers and Their Products</h1>
<p>
<asp:GridView ID="GridView1" runat="server"
AutoGenerateColumns="False"
CssClass="DataWebControlStyle">
<HeaderStyle CssClass="HeaderStyle" />
<AlternatingRowStyle CssClass="AlternatingRowStyle" />
<Columns>
<asp:BoundField DataField="CompanyName"
HeaderText="Supplier" />
<asp:TemplateField HeaderText="Products">
<ItemTemplate>
<asp:BulletedList ID="BulletedList1"
runat="server" DataSource="<%# CType(CType(Container.DataItem, System.Data.DataRowView).Row, Northwind.SuppliersRow).GetProducts() %>"
DataTextField="ProductName">
</asp:BulletedList>
</ItemTemplate>
</asp:TemplateField>
</Columns>
</asp:GridView>
</p>
</div>
</form>
</body>
</html>
SuppliersAndProducts.aspx.vb
Imports NorthwindTableAdapters
Partial Class SuppliersAndProducts
Inherits System.Web.UI.Page
Protected Sub Page_Load(ByVal sender As Object, ByVal e As System.EventArgs) _
Handles Me.Load
Dim suppliersAdapter As New SuppliersTableAdapter
GridView1.DataSource = suppliersAdapter.GetSuppliers()
GridView1.DataBind()
End Sub
End Class
Obrázek 35: Název společnosti dodavatele je uveden v levém sloupci, jejich produkty vpravo (kliknutím zobrazíte obrázek plné velikosti).
Shrnutí
Při vytváření webové aplikace, která vytváří DAL, by měl být jedním z prvních kroků, ke kterému dochází před zahájením vytváření prezentační vrstvy. V sadě Visual Studio je vytvoření DAL založené na typed DataSets úkol, který lze provést za 10 až 15 minut bez psaní řádku kódu. Následující kurzy budou vycházet z tohoto DAL. V dalším kurzu definujeme řadu obchodních pravidel a podíváme se, jak je implementovat v samostatné vrstvě obchodní logiky.
Šťastné programování!
Další čtení
Další informace o tématech probíraných v tomto kurzu najdete v následujících zdrojích informací:
- Vytvoření dal pomocí objektů TableAdapter se silnými typy a datových tabulek ve VS 2005 a ASP.NET 2.0
- Návrh komponent datové vrstvy a předávání dat prostřednictvím vrstev
- Šifrování informací o konfiguraci v aplikacích ASP.NET 2.0
- TableAdapter – přehled
- Práce s typed dataSet
- Použití přístupu k datům se silnými typy v sadě Visual Studio 2005 a ASP.NET 2.0
- Rozšíření metod TableAdapter
Školicí video o tématech obsažených v tomto kurzu
- Vrstvy přístupu k datům v aplikacích ASP.NET
- Ruční vytvoření vazby datové sady k Datagridu
- Práce s datovými sadami a filtry z aplikace ASP
O autorovi
Scott Mitchell, autor sedmi knih ASP/ASP.NET a zakladatel 4GuysFromRolla.com, pracuje s webovými technologiemi Microsoftu od roku 1998. Scott pracuje jako nezávislý konzultant, trenér a spisovatel. Jeho nejnovější kniha je Sams Teach Yourself ASP.NET 2.0 za 24 hodin. Je dostupný na mitchell@4GuysFromRolla.comadrese . nebo prostřednictvím svého blogu, který lze najít na http://ScottOnWriting.NET.
Zvláštní díky
Tato série kurzů byla zkontrolována mnoha užitečnými recenzenty. Vedoucí hodnotící tohoto kurzu byli Ron Green, Hilton Giesenow, Dennis Patterson, Liz Shulok, Abel Gomez a Carlos Santos. Chcete si projít nadcházející články MSDN? Pokud ano, zahoďte mi řádek na mitchell@4GuysFromRolla.com.