Vytvoření vrstvy přístupu k datům (C#)
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ěnou v adresáři App_Data . Kromě souboru databáze obsahuje složka App_Data 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 nastavení NORTHWNDConnectionString v souboru Web.config aplikace. 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, do které chcete web umístit, a nastavte jazyk na C#.
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 a složkou App_Data .
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 Server 2005 Express Edition ve složce App_Data nebo pokud máte nastavení databázového serveru Microsoft SQL Server 2000 nebo 2005, který chcete použít.
Použití databáze ve složce App_Data
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 App_Data staženého webu (NORTHWND). MDF).
Databáze umístěná ve složce App_Data 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 aplikace Microsoft Access .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 do App_Data 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 specifický pro podkladový zdroj dat, například vytvoření připojení k databázi, vydávání příkazů SELECT, INSERT, UPDATE a DELETE 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 obsahuje tabulky Products and Categories , 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 produktech
- GetProductsByCategoryID(categoryID) – vrátí všechny produkty, které patří do zadané kategorie.
- GetProductByProductID(productID) – 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í. Pokud chcete získat přístup ke konkrétnímu sloupci z volně typované 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. Tabulka DataTable silného typu na druhou stranu bude mít každý z jejích sloupců implementovaný jako vlastnosti, což vede k kódu, který vypadá takto: DataTable. Řádky[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 složky App_Code 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 pro tabulku 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. Pro naši tabulku DataTable produktů bude Objekt TableAdapter obsahovat metody GetProducts(), GetProductByCategoryID(categoryID) atd., 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 v souboru Web.config. 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 <části connectionStrings>, která se dá 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 souboru 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 tabulky Products :
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. Třída ADO.NET DataAdapter, například implementuje tento vzor pomocí metody Fill().
- 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. Pojďme také přejmenovat spíše obecnou metodu GetData na GetProducts.
Pokud je zaškrtnuté políčko GenerateDBDirectMethods, vytvoří metody Insert(), Update() a Delete() pro TableAdapter. Pokud tuto možnost ponecháte nezaškrtnutou, bude nutné všechny aktualizace provést pouze metodou Update() objektu TableAdapter, která přebírá typovou datovou sadu, tabulku DataTable, jednu 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 atd.), stejně jako metody ProductsTableAdapter (Fill() a GetProducts()).
Obrázek 12: Do datové sady Typed DataSet byly přidány tabulky Products DataTable a ProductsTableAdapter (kliknutím zobrazíte obrázek s plnou velikostí).
V tuto chvíli máme datovou sadu typed s jednou DataTable (Northwind.Products) a silně typd DataAdapter třídy (NorthwindTableAdapters.ProductsTableAdapter) s metodou GetProducts(). Tyto objekty lze použít pro přístup k seznamu všech produktů z kódu, například:
NorthwindTableAdapters.ProductsTableAdapter productsAdapter =
new NorthwindTableAdapters.ProductsTableAdapter();
Northwind.ProductsDataTable products;
products = productsAdapter.GetProducts();
foreach (Northwind.ProductsRow productRow in products)
Response.Write("Product: " + productRow.ProductName + "<br />");
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ácené GetProducts () metodou GridView pouze skent třemi řádky kódu v rámci obslužné rutiny události Page_Load .
AllProducts.aspx
<%@ Page Language="C#" AutoEventWireup="true" CodeFile="AllProducts.aspx.cs"
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>
<h2>
All Products</h2>
<p>
<asp:GridView ID="GridView1" runat="server"
CssClass="DataWebControlStyle">
<HeaderStyle CssClass="HeaderStyle" />
<AlternatingRowStyle CssClass="AlternatingRowStyle" />
</asp:GridView>
</p>
</div>
</form>
</body>
</html>
AllProducts.aspx.cs
using System;
using System.Data;
using System.Configuration;
using System.Collections;
using System.Web;
using System.Web.Security;
using System.Web.UI;
using System.Web.UI.WebControls;
using System.Web.UI.WebControls.WebParts;
using System.Web.UI.HtmlControls;
using NorthwindTableAdapters;
public partial class AllProducts : System.Web.UI.Page
{
protected void Page_Load(object sender, EventArgs e)
{
ProductsTableAdapter productsAdapter = new
ProductsTableAdapter();
GridView1.DataSource = productsAdapter.GetProducts();
GridView1.DataBind();
}
}
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 ASP.NET Page_Load stránky ASP.NET zapisovali tři řádky kódu, v budoucích kurzech prozkoumáme, jak pomocí ObjectDataSource deklarativně načíst data 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 naše ProductsTableAdapter třída má ale jednu metodu GetProducts () vracející 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 v části ProductsTableAdapter 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 příkaz SELECT , který vrací řádky.
Obrázek 15: Volba pro vytvoření příkazu SELECT , 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ý příkaz SELECT z GetProducts(), ale přidejte následující klauzuli WHERE : 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. Pro vzor Fill změníme název na FillByCategoryID a pro vrácení návratového vzoru 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
Za chvíli 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 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í ID Kategorie 1.
Beverages.asp
<%@ Page Language="C#" AutoEventWireup="true" CodeFile="Beverages.aspx.cs"
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>
<h2>Beverages</h2>
<p>
<asp:GridView ID="GridView1" runat="server"
CssClass="DataWebControlStyle">
<HeaderStyle CssClass="HeaderStyle" />
<AlternatingRowStyle CssClass="AlternatingRowStyle" />
</asp:GridView>
</p>
</div>
</form>
</body>
</html>
Beverages.aspx.cs
using System;
using System.Data;
using System.Configuration;
using System.Collections;
using System.Web;
using System.Web.Security;
using System.Web.UI;
using System.Web.UI.WebControls;
using System.Web.UI.WebControls.WebParts;
using System.Web.UI.HtmlControls;
using NorthwindTableAdapters;
public partial class Beverages : System.Web.UI.Page
{
protected void Page_Load(object sender, EventArgs e)
{
ProductsTableAdapter productsAdapter = new
ProductsTableAdapter();
GridView1.DataSource =
productsAdapter.GetProductsByCategoryID(1);
GridView1.DataBind();
}
}
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í příkazu INSERT, UPDATE nebo DELETE pro databázi, 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 v tabulce Products by metoda delete převzala celočíselnou parametr označující IdProduktu záznamu k odstranění, zatímco metoda insert by převzala řetězec pro ProductName, desetinné číslo pro UnitPrice, celé číslo 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í, obsahuje ProductsTableAdapter 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 vytváření objektu TableAdapter nechali políčko GenerateDBDirectMethods zaškrtnuté, implementují se také metody Insert(), Update() a Delete().
Oba vzory úprav dat používají vlastnosti InsertCommand, UpdateCommand a DeleteCommand tableAdapter k vydání příkazů INSERT, UPDATE a DELETE pro databázi. Vlastnosti InsertCommand, UpdateCommand a DeleteCommand můžete zkontrolovat a upravit kliknutím na Objekt TableAdapter v Návrháři datové sady a následným přechodem na okno 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 obsahuje vlastnosti InsertCommand, UpdateCommand a DeleteCommand (kliknutím zobrazíte obrázek v plné velikosti).
Chcete-li prozkoumat nebo upravit některé z těchto vlastností příkazu databáze, klikněte na podproperty CommandText , který zobrazí Tvůrce dotazů.
Obrázek 24: Konfigurace příkazů INSERT, UPDATE a 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ě:
NorthwindTableAdapters.ProductsTableAdapter productsAdapter =
new NorthwindTableAdapters.ProductsTableAdapter();
// For each product, double its price if it is not discontinued and
// there are 25 items in stock or less
Northwind.ProductsDataTable products = productsAdapter.GetProducts();
foreach (Northwind.ProductsRow product in products)
if (!product.Discontinued && product.UnitsInStock <= 25)
product.UnitPrice *= 2;
// Update the products
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ý:
NorthwindTableAdapters.ProductsTableAdapter productsAdapter =
new NorthwindTableAdapters.ProductsTableAdapter();
// Delete the product with ProductID 3
productsAdapter.Delete(3);
// Update Chai (ProductID of 1), setting the UnitsOnOrder to 15
productsAdapter.Update("Chai", 1, 1, "10 boxes x 20 bags",
18.0m, 39, 15, 10, false, 1);
// Add a new product
productsAdapter.Insert("New Product", 1, 1,
"12 tins per carton", 14.95m, 15, 0, 10, false);
Vytváření vlastních metod vložení, aktualizace a odstranění
Metody Insert(), Update() a Delete() vytvořené přímou metodou DB můžou 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 není zvlášť jasné, co sloupce tabulky Products mapují na každý vstupní parametr na metody Update() a Insert(). Někdy může docházet k tomu, že chceme aktualizovat jenom jeden sloupec nebo dva sloupce, nebo chceme upravit metodu Insert(), která například vrátí hodnotu pole IDENTITY nově vloženého záznamu (automatické přírůstky).
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 idproduktu nově přidaného záznamu. Proto se rozhodnete vytvořit dotaz INSERT .
Obrázek 25: Vytvoření metody pro přidání nového řádku do tabulky Products (kliknutím zobrazíte obrázek v plné velikosti)
Na další obrazovce se zobrazí CommandText insertCommand. Rozšiřte tento dotaz přidáním příkazu SELECT SCOPE_IDENTITY() na konec dotazu, který vrátí poslední hodnotu identity vloženou do sloupce IDENTITY ve stejném oboru. (Další informace o SCOPE_IDENTITY() a důvodech použití SCOPE_IDENTITY() najdete v technické dokumentaci místo @@IDENTITY.) Před přidáním příkazu SELECT nezapomeňte ukončit příkaz INSERT středníkem.
Obrázek 26: Rozšíření dotazu o vrácení hodnoty SCOPE_IDENTITY() (kliknutím zobrazíte obrázek v plné velikosti)
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 tabulce Products , pravděpodobně jste zapomněli ukončit příkaz INSERT středníkem. Nakonfigurujte metodu InsertProduct a ujistěte se, že máte středník s oddělovači příkazů INSERT a SELECT .
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 ale, aby metoda InsertProduct vrátila hodnotu vrácenou dotazem, nikoli počet ovlivněných řádků. Chcete-li toho dosáhnout, upravte Vlastnost ExecuteMode metody InsertProduct na Scalar.
Obrázek 28: Změna vlastnosti ExecuteMode na skalární (kliknutím zobrazíte obrázek s plnou velikostí)
Následující kód ukazuje tuto novou metodu InsertProduct v akci:
NorthwindTableAdapters.ProductsTableAdapter productsAdapter =
new NorthwindTableAdapters.ProductsTableAdapter();
// Add a new product
int new_productID = Convert.ToInt32(productsAdapter.InsertProduct
("New Product", 1, 1, "12 tins per carton", 14.95m, 10, 0, 10, false));
// On second thought, delete the product
productsAdapter.Delete(new_productID);
Krok 5: Dokončení vrstvy přístupu k datům
Všimněte si, že třída ProductsTableAdapter vrací hodnoty CategoryID a SupplierID z tabulky Products , ale neobsahuje sloupec CategoryName z tabulky Categories nebo Sloupec CompanyName z tabulky Dodavatelé , i když jsou to sloupce, které chceme zobrazit při zobrazení informací o produktu. Můžeme rozšířit počáteční metodu TableAdapter GetProducts () tak, aby zahrnovala hodnoty sloupců CategoryName i CompanyName , které aktualizují tabulku DataTable silného typu tak, aby zahrnovala 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 pro vkládání, aktualizaci a odstraňování ovlivněny poddotazy v klauzuli SELECT . Když se postaráme o přidání dotazů do kategorií a dodavatelů jako poddotazů, místo funkce JOIN nebudeme muset tyto metody přepracovat pro úpravy dat. Klikněte pravým tlačítkem myši na metodu GetProducts() v ProductsTableAdapter a zvolte Konfigurovat. Potom upravte klauzuli SELECT 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 příkazu SELECT pro metodu GetProducts() (kliknutím zobrazíte obrázek s plnou velikostí)
Po aktualizaci metody GetProducts() pro použití tohoto nového dotazu bude DataTable obsahovat dva nové sloupce: CategoryName a SupplierName.
Obrázek 30: Tabulka DataTable produktů má dva nové sloupce
Chvilku aktualizujte klauzuli SELECT také v metodě GetProductsByCategoryID(categoryID).
Pokud aktualizujete GetProducts() SELECT pomocí syntaxe JOIN, nebude Návrhář dat 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 u metody InsertProduct dříve v tomto kurzu. Kromě toho budete muset ručně zadat hodnoty vlastností InsertCommand, UpdateCommand a DeleteCommand , pokud chcete použít model 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 sadě ProductsTableAdapter obsahují poddotazy pro získání kategorií jednotlivých produktů a názvů dodavatelů. Kromě toho, pokud jste postupovali podle, už jste přidali metody GetProducts() a GetProductsByCategoryID(categoryID) třídy ProductsTableAdapter 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 soubor Northwind.xsd 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 metodu GetProducts() do třídy SuppliersRow . Třída SuppliersRow představuje jeden záznam v tabulce Suppliers ; 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 složce App_Code s názvem SuppliersRow.cs a přidejte následující kód:
using System;
using System.Data;
using NorthwindTableAdapters;
public partial class Northwind
{
public partial class SuppliersRow
{
public Northwind.ProductsDataTable GetProducts()
{
ProductsTableAdapter productsAdapter =
new ProductsTableAdapter();
return
productsAdapter.GetProductsBySupplierID(this.SupplierID);
}
}
}
Tato částečná třída dává kompilátoru pokyn, že při sestavování Northwind.SuppliersRow třídy zahrnout GetProducts() metoda, kterou jsme právě definovali. Pokud projekt sestavíte a pak se vrátíte do zobrazení třídy, zobrazí se teď getProducts() uvedený jako metoda Northwind.SuppliersRow.
Obrázek 34: Metoda GetProducts() je nyní součástí třídy Northwind.SuppliersRow
Metoda GetProducts() se teď dá použít k vytvoření výčtu sady produktů pro konkrétního dodavatele, jak ukazuje následující kód:
NorthwindTableAdapters.SuppliersTableAdapter suppliersAdapter =
new NorthwindTableAdapters.SuppliersTableAdapter();
// Get all of the suppliers
Northwind.SuppliersDataTable suppliers =
suppliersAdapter.GetSuppliers();
// Enumerate the suppliers
foreach (Northwind.SuppliersRow supplier in suppliers)
{
Response.Write("Supplier: " + supplier.CompanyName);
Response.Write("<ul>");
// List the products for this supplier
Northwind.ProductsDataTable products = supplier.GetProducts();
foreach (Northwind.ProductsRow product in products)
Response.Write("<li>" + product.ProductName + "</li>");
Response.Write("</ul><p> </p>");
}
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="C#" CodeFile="SuppliersAndProducts.aspx.cs"
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>
<h2>
Suppliers and Their Products</h2>
<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="<%# ((Northwind.SuppliersRow) ((System.Data.DataRowView) Container.DataItem).Row).GetProducts() %>"
DataTextField="ProductName">
</asp:BulletedList>
</ItemTemplate>
</asp:TemplateField>
</Columns>
</asp:GridView>
</p>
</div>
</form>
</body>
</html>
SuppliersAndProducts.aspx.cs
using System;
using System.Data;
using System.Configuration;
using System.Collections;
using System.Web;
using System.Web.Security;
using System.Web.UI;
using System.Web.UI.WebControls;
using System.Web.UI.WebControls.WebParts;
using System.Web.UI.HtmlControls;
using NorthwindTableAdapters;
public partial class SuppliersAndProducts : System.Web.UI.Page
{
protected void Page_Load(object sender, EventArgs e)
{
SuppliersTableAdapter suppliersAdapter = new
SuppliersTableAdapter();
GridView1.DataSource = suppliersAdapter.GetSuppliers();
GridView1.DataBind();
}
}
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.