AspNet.sk     Diskusné fóra     Vitajte v QuickStarts     ASP.NET     Silverlight     Ako môžem...? (en)     Class prehliadač Príklady chcem v ...   
Menu
Skip Navigation Links.
Späť na ASP.NET príručku

ASP.NET QuickStart Príručka

Viazanie na objekty

Predchádzajúca sekcia ukázala viazanie ovládacích prvkov na SqlDataSource, ktorý podporuje vlastnosti na špecifikáciu reťazca pripojenia (connection string), SQL príkazov alebo uložených procedúr použitých na dopytovanie a modifikáciu databázy. Kým spomínaný prístup je vhodný pre väčšinu osobných stránok malého rozsahu, ukladanie SQL príkazov priamo na prezentačné stránky aplikácie môže vyústiť v problémy pri údržbe aplikácii podnikového rozsahu. Väčší rozsah obvykle vyžaduje „zapúzdrený“ dátový model použitím podvrstvy prístupu k dátam v rámci aplikačnej vrstvy, alebo použitím business komponentov. Na šťastie, model ASP.NET-ových ovládacích prvkov podporuje prístup s použitím prvku ObjectDataSource.

Objektový model prvku ObjectDataSource je podobný ako pri prvku SqlDataSource. Namiesto vlastnosti ConnectionString, ObjectDataSource vystavuje vlastnosť TypeName, ktorá určuje typ objektu (meno triedy) ktorú inštancovať pri vykonávaní dátových operácií. Podobne ako pri SqlDataSource, prvok ObjectDataSource podporuje vlastnosti ako SelectMethod, UpdateMethod, InsertMethod a DeleteMethod pre stanovenie metód asociovaného údajového typu, ktoré sa budú volať pri vykonávaní dátových operácií. Sekcie opisuje techniky pre budovanie vrstvy prístupu k dátam a pri tvorbe komponentov aplikačnej vrstvy a ich vystavovaní cez prvok ObjectDataSource.

Viazanie na vrstvu prístupu k údajom

Vrstva prístupu k údajom obaľuje kód ADO.NET na dopytovanie a modifikáciu databázy s použitím príkazov SQL. Zvyčajne abstrahuje od detailov vytvárania spojenia v ADO.NET a tvorby príkazov, ktoré sú prístupné cez metódy , ktoré môžu byť volané s vhodnými parametrami. Typický komponent vrstvy prístupu k dátam môže byť vyjadrený nasledovne:
public class MyDataLayer {

  public DataView GetRecords();
  public DataView GetRecordsByCategory(String categoryName);
  public DataView GetRecordByID(int recordID);

  public int UpdateRecord(int recordID, String recordData);
  public int DeleteRecord(int recordID);
  public int InsertRecord(int recordID, String recordData);
}
Prvok ObjectDataSource môže byť asociovaný s týmto typom nasledujúcim spôsobom:
  <asp:ObjectDataSource TypeName="MyDataLayer" SelectMethod="GetRecords" UpdateMethod="UpdateRecord" 
    DeleteMethod="DeleteRecord" InsertMethod="InsertRecord" runat="server"/>
ObjectDataSource vyžaduje špecifický návrhový vzor pre objekty s ktorými dokáže pracovať. Obmedzenia spočívajú v bezstavovom prostredí, v ktorom sú Webové požiadavky spúšťané. Pretože objekty sú typicky vytvárané pre každú žiadosť a sú následne likvidované, vyžaduje sa aj od dát, ktoré sú naviazané cez objektový dátový zdroj, aby boli bezstavové. Zvyčajne ObjectDataSource používa štandardný konštruktor (bezparametrický) na konštrukciu typu špecifikovaného vlastnosťou Typename, hoci je možné inštancovať typ pre ObjectDataSource reagovaním na udalosť ObjectCreating , vytvoriť inštanciu dátového objektu a priradiť ju vlastnosti ObjectInstance, ktorá je výstupným parametrom v rámci argumentov udalosti. Objektová metóda asociovaná s vlastnosťou SelectMethod môže vrátiť akýkoľvek Object, zoznam IEnumerable, kolekciu alebo pole. V príklade vrstvy prístupu k dátam, objekt DataView implementuje rozhranie IEnumerable. Ako sa dozviete v nasledujúcej sekcii, spomínané metódy môžu tiež vrátiť silno-typovanú kolekciu, alebo objekt.

GetProducts() -> ProductCollection
GetProductsDataSet() -> DataSet
GetProduct (int productId) -> Product
Metódy Update, Insert a Delete by mali brať individuálne dátové položky ako parametre, ale môžu voliteľne akceptovať aj objekty agregovaných tried s verejnými vlastnosťami pre polia dátových záznamov.
UpdateProduct (int id, String name, double price, bool inStock)
UpdateProduct (Product p)  // p.ID, p.Name, p.Price, p.InStock …
DeleteProduct (int id)
Podobne, ako v príklade na SqlDataSource, mená parametrov alebo vlastností dátových položiek odovzdaných metódam Update, Insert a Delete musia byť zhodné s menami dátových položiek vrátených metódou Select, aby fungovala automatická editácia, vymazávanie prípadne vkladanie. Podobne ako v prvku SqlDataSource, parametre metód ObjectDataSource môžu byť asociované s dátovými objektmi parametrov priradených do kolekcií SelectParameters, FilterParameters, UpdateParameters, DeleteParameters alebo InsertParameters.

Nasledujúci príklad ukazuje, ako prvok ObjectDataSource vystavuje dáta z komponentu vrstvy prístupu k dátam nazvaného AuthorsDB. Súbor v ktorom sa nachádza zdroj komponentu je umiestnený v adresári App_Code, ktorý ASP.NET dynamicky kompiluje počas behu stránky.

VB Binding to a Data Access Layer
Run Sample View Source

Viazanie na aplikačnú vrstvu

Dôležitý fakt, ktorý treba spomenúť o dátovej vrstve je, že metóda SelectMethod vracia výsledky spustenia dopytu ako DataView a preto vystavuje schému podkladovej databázy prezentačnej vrstve. Je dôležité uvedomiť si, že vo vrstve prístupu k dátam neexistujú žiadne biznis-pravidlá (definujúce logiku aplikácie); jednoducho sa spúšťajú dopyty a vracajú výsledky. Aby sa oddelila prezentácia od databázovej schémy a zaviedla aplikačná logika alebo validácia, vrstva prístupu k dátam je obvykle obalená aplikačnou vrstvou (vrstvou biznis-pravidiel).

Vrstva biznis-pravidiel je podobná vrstve prístupu k dátam v tom, že vystavuje bezstavové metódy pre ObjectDataSource za účelom dátového viazania ovládacích prvkov umiestnených na webových stránkach. Namiesto priameho vrátenia výsledkov ADO.NET operácií, zvyčajne vracia silno-typované objekty, ktoré reprezentujú biznis entity používané aplikáciou. Prístup oddeľuje prezentačnú vrstvu od schémy podkladového dátového zdroja, čím sa zjednodušuje udržiavanie časti kódu stránky, ktorá pristupuje k dátam od časti, ktorá ich konzumuje. S dobre navrhnutou strednou vrstvou môžete zmeniť podkladový dátový zdroj na úplne inú schému bez nutnosti aktualizovať jednotlivé stránky aplikácie.

Ukázaný je príklad na vrstvu biznis logiky:
public class MyBusinessLayer {

  public RecordCollection GetRecords();
  public RecordCollection GetRecordsByCategory(String categoryName);
  public RecordCollection GetRecordByID(int recordID);
  public String GetRecordName(int recordID);
  public Object GetRecordData(int recordID);

  public int UpdateRecord(Record r);
  public int DeleteRecord(Record r);
  public int InsertRecord(Record r);

  public int UpdateRecordData(int ID, String Data);
  public int UpdateRecordName(int ID, String Name);
}

public class Record {
  public int ID { get; set; }
  public String Name { get; set; }
  public Object Data { get; set; }
}
Hlavný rozdiel medzi vrstvou biznis logiky a vrstvou prístupu k dátam je, že prvá poskytuje silno-typovanú kolekciu RecordCollection záznamových objektov namiesto DataView. Tak isto umožňuje použitie objektu Record ako parametra pri operáciách Update, Insert a Delete. Vlastnosť DataObjectTypeName dovoľuje nastaviť objektový dátový zdroj, aby umožňoval odovzdávanie tohto typu namiesto individuálnych hodnôt polí. Do implementácie metód na biznis-vrstve, môžete zahrnúť vlastnú logiku pre validáciu biznis pravidiel. Môžete na príklad zaistiť, že len záznamy v kategórii "In Review" môžu byť editované alebo, že iba Administrátori môžu vkladať nové záznamy. Môžete taktiež vložiť validačnú logiku, aby sta zaistili, že dátové typy a hodnoty poskytnuté ako argumenty sú korektné pred samotným vkladaním, alebo modifikáciou dát v databáze. Všimnite si, že validačná logika v biznis-vrstve nie je náhradou za validáciu vstupu v prezentačnej vrstve, ktorá pomáha smerovať používateľa pri zadávaní správnych hodnôt pred potvrdením zmeny.

Príklad nižšie ukazuje jednoduchú biznis-vrstvu nazvanú AuthorsComponent. Vnútorne vrstva odovzdáva volania dátovej vrstve, aby vykonala databázové operácie. Pre jednoduchosť vrstva nebude zahŕňať žiadne biznis-pravidlá, ani validáciu, hoci v reálnej aplikácii by ich obsahovala. Všimnite si, že namiesto písanie vlastnej triedy kolekcie, ktorá má vracať silno-typované záznamy, príklad využíva výhody novej vlastnosti jazyka v .Net Framework 2.0, ktorá má názov "Generics" (Generické-šablónové objekty), na vytvorenie kolekcie objektov Author. Použitie silno-typovaných kolekcií umožňuje prvku ObjectDataSource odvodiť schému biznis-objektov už počas dizajnovania stránky (vo Visual Studiu a iných prostriedkoch).

VB Binding to a Business Logic Layer
Run Sample View Source

Ilustrácia nižšie ukazuje interakciu medzi GridView, ObjectDataSOurce a biznis-vrstvou. ObjectDataSource je konfigurovaný aby volal metódu GetContacts na type ContactsList, ktorá vracia kolekciu objektov Contact. GridView prechádza cez všetky vlastnosti objektu Contact a viaže sa priamo na vlastnosti (ID,Name) typu, aby vyrenderoval stĺpce. Všimnite si, že metóda SelectMethod môže vrátiť buď IEnumerable objektov Contact, alebo môže vrátiť jediný objekt Contact. Prvok ObjectDataSource vždy obaľuje výsledky metódy SelectMethod do IEnumerable, aj keď rozhranie samy neimplementujú.


Podobne ako SqlDataSource, prvok ObjectDataSource podporuje triedenie, keď metóda SelectMethod vracia objekt DataSet, DataView alebo DataTable. Vnútorne využíva ObjectDataSource vlastnosť DataView.Sort na vykonanie triedenia. ObjectDataSource tiež podporuje vlastnú implementáciu triedenia v metóde SelectMethod, čo je vhodné keď metóda nevracia DataSet, DataView alebo DataTable. Vlastné triedenie sa nastaví pomocou vlastnosti SortParameterName na meno parametra metódy, ktorý akceptuje SortExpression z dátového zdroja. Keď sa zavolá metóda SelectMethod, ObjectDataSource jej odovzdá výraz , s pomocou ktorého môžete implementovať vlastnú logiku triedenia. Predošlý príklad demonštruje vlastnú implementáciu triedenia v triede AuthorsComponent.

ObjectDataSource tak isto podporuje vlastné stránkovanie v implementácii SelectMethod. Konfiguruje sa použitím vlastností StartRowIndexParameterName, MaximumRowsParameterName a SelectCountMethod a bližšie je rozobraný v sekcii Pokročilé Stránkovanie a Triedenie návodu.

Viazanie na Visual Studio DataSet

Budovanie vrstvy prístupu k dátam môže byť zdĺhavé, pretože sa často stáva, že ADO.NET kód na spúšťanie SQL príklazov alebo uložených procedúr je ten istý, alebo podobný pre pre rôzne metódy vrstvy. Hoci môžete písať vašu vlastnú vrstvu prístupu k dátam, použitím vlastného kódu ADO.NET a techník popísaných vyššie, Visual Studio poskytuje príjemnejšiu cestu generovania vrstvy prístupu k dátam za vás, ktorá je založená na vstupoch z jednoduchého sprievodcu. Vrstva prístupu k dátam je tvorená silno-typovanými objektami DataSet. DataSet zahŕňa typy TableAdapter, ktoré vystavujú metódy pre vracanie silno-typovaných objekto DataTable. Metódy sú vhodné pre priame viazanie sa na ObjectDataSource, alebo na volanie z biznis-vrstvy.

Aby ste pridali DataSet do vášho projektu vo Visual Studiu, kliknite pravým tlačidlom myši v Solution Explorer a zvoľte voľbu "Add New Item...", následne zvoľte typ projektovej položky "Dataset". Visual studio sa môže spýtať, či si želáte vložiť jeho kód do adresára App_Code; vyberte "Yes" aby ste mohli pokračovať. Visual Studio pridá súbor DataSet.xsd do adresára App_Code a otvorí DataSet dizajnér, v ktorom štandardne spustí sprievodcu vytváraním tabuľkových adaptérov. Za pomoci sprievodcu môžete zvoliť SQL príkazy alebo uložené procedúry z vašej databázy, a následne pomenovať metódy asociované so zvolenými dopytmi/príkazmi na poslednej stránke sprievodcu.



Tabuľkový adaptér môže vystaviť dva typy metód: Metódy vhodné na napĺňanie existujúceho DataSet-u (Fill metódy), a metódy, ktoré vracajú už vyplnený objekt DataTable. Prvý typ je vhodnejší pre rich klienta (Kde sa DataSet udržiava v pamäti počas celej doby behu aplikácie) a druhý typ je vhodnejší pre použitie v ObjectDataSource. Sprievodca vytváraním tabuľkových adaptérov môže automaticky generovať metódy Update, Insert a Delete z SQL príkazov, ktoré poskytnete (vyžaduje sa, aby bol vybraný primárny kľúč). Po ukončení sprievodcu, Visual Studio pridá novú dátovú tabuľku a nový typ TableAdapter do DataSet dizajnéra.

Tabuľkový adaptér reprezentuje schému pre jedinú množinu výsledkov operácií Select, Update, Insert alebo Delete. Môžete pridať niekoľko TableAdaptérov do DataSet-u pravým kliknutím v DataSet dizajnéri. Dajú sa tiež pridať dodatočné dopyty, ak vracajú tú istú schému (množinu dátových polí). Dopyt pridáte tak, že pravým tlačidlom kliknete na TableAdapter v DataSet dizajnéri. Môžete mať na príklad jediný TableAdapter s metódami GetAuthors() a GetAuthorsByID(int id), ale budete potrebovať nový TableAdapter na pridanie metódy GetTitles(). Obrázok nižšie ukazuje DataSet dizajnér s niekoľkými pridanými tabuľkovými adaptérmi:


Keď dokončíte návrh DataSetu, uložte DataSet.xsd (čo spôsobí, že dizajnér na pozadí skompiluje typy, aby boli prístupné pre vaše stránky). Teraz môžete vidieť, že typy sú prístupné pre kód stránky:
protected void Page_Load(object sender, EventArgs e)
{
    DataSetTableAdapters.PhotosTableAdapter adapter = new DataSetTableAdapters.PhotosTableAdapter();
    adapter.GetPhotosForAlbum(0);
}
Nepotrebujete volať spomínané metódy priamo z kódu. Môžete na ne naviazať priamo ObjectDataSource:
<asp:ObjectDataSource ID="ObjectDataSource1" runat="server"
  TypeName="DataSetTableAdapters.PhotosTableAdapter"
  SelectMethod="GetPhotosForAlbum">
  <SelectParameters>
    <asp:QueryStringParameter Name="albumID" QueryStringField="id" Type="Int32"/>
  </SelectParameters>
</asp:ObjectDataSource>
Posledný príklad ukazuje ObjectDataSource naviazaný na metódy DataSet.TableAdapter. Tento konkrétny DataSet budeme používať neskôr v nasledujúcich príkladoch návodu, aby sme ukázali, ako môžete použiť prvky ASP.NET na implementáciu jednoduchého foto-albumu. Všimnite si, že DetailsView v príklade používa nový typ poľa nazývaný ImageField na zobrazenie fotiek. Zároveň si všimnite použitie ConvertNullToDBNull na prvku ObjectDataSource, aby sa parametre s hodnotou null konvertovali na hodnotu DBNull predtým, ako sú odovzdané metódam tabuľkového adaptéra (vyžadované). br />
VB Binding to a Visual Studio DataSet
Run Sample View Source
Microsoft .NET Framework SDK QuickStart Tutorials Version 2.0
Copyright © 2005 Microsoft Corporation. All rights reserved.
Preklad do slovenského jazyka - Copyright © 2005 - 2007 www.aspnet.sk, www.qsh.sk
Pošlite komentár k tejto stránke
Copyright © 2002 - 2008 Chastia, spol. s r. o., Igor Stanek, Designed by Lacino
Portál je hostovaný na serveroch firmy Quantasoft - www.qsh.sk.