1 / 67

ADO.NET, Dáta, XML,Triedy,...

ADO.NET, Dáta, XML,Triedy,. ADO.NET a ADO. ADO.NET je evoluc í technologie ADO (ActiveX Data Objects), což je knihovna COMovských komponent, která má spoustu nevýhod ADO funguje v podstatě jenom online základní datovou strukturou je RecordSet, který representuje jednu tabulku

tamera
Télécharger la présentation

ADO.NET, Dáta, XML,Triedy,...

An Image/Link below is provided (as is) to download presentation Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author. Content is provided to you AS IS for your information and personal use only. Download presentation by click this link. While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server. During download, if you can't get a presentation, the file might be deleted by the publisher.

E N D

Presentation Transcript


  1. ADO.NET, Dáta, XML,Triedy,...

  2. ADO.NET a ADO • ADO.NET je evolucí technologie ADO (ActiveX Data Objects), což je knihovna COMovských komponent, která má spoustu nevýhod • ADO • funguje v podstatě jenom online • základní datovou strukturou je RecordSet, který representuje jednu tabulku • ztrácejí se vztahy mezi daty, přístup je sekvenční • malá abstrakce od fyzického datového modelu • data jsou reprezentována a předávána pomocí COMovských datových typů

  3. ADO.NET a ADO • naproti tomu ADO.NET • je primárně designován pro práci offline • data je možné logicky modelovat • hlavní datovou struktirou je DataSet, který reprezentuje jednu nebo více tabulek a jejich vztahy • datové typy jsou svázány s XML schématy • není nutné data konvertovat,

  4. ADO.NET a .NET Framework Microsoft .NET Framework Web Services User Interface Data and XML ADO.NET XML ... ... Base Classes Common Language Runtime

  5. Základní pojmy a architektura • Základní jmenné prostory • System.Data – třídy reprezentující obecný přístup k datům, bez ohledu na konktrétní databázi (DataSet, DataTable, Constraint) • System.Data.(OleDb|Oracle|SqlClient|Odbc) – třídy poskytovatelů dat (data providers) • System.Data.Common • System.Data.SqlTypes, System.Data.Sql – specifické třídy pro Microsft SQL Server

  6. .NET Data Providers Hierarchie System.Data .OleDb .SqlClient SqlCommandSqlConnectionSqlDataReaderSqlDataAdapter OleDbCommandOleDbConnectionOleDbDataReaderOleDbDataAdapter

  7. Třídy poskytovatelů dat jsou vždy odvozeny od jedné základní třídy a implementují společné rozhraní podle toho, co mají dělat každá třída má čtyři verze, jejichž jména začínají jménem příslušného poskytovatele dat např. (Sql|OleDB|Oracle|ODBC)Connection implementují rozhraní IDbConnection a dědí od třídy DbConnection, umožňují se připojit k databázi

  8. Třídy poskytovatelů

  9. DataSet DataSet je třída, která představuje offline kontejner pro data není nijak závislá na databázi, může představovat data z jakéhokoliv zdroje (CVS soubor, XML ap.) obsahuje v sobě objekty představující tabulky, jejich sloupce a řádky a vztahy mezi nimi každý z těchto prvků je reprezentován příslušnou třídou (DataTable, DataRow,...)

  10. DataTable objekt, který představuje tabulku dat obsahuje množinu sloupců (columns) s určitými vlastnostmi může obsahovat jeden nebo více řádků (rows) s vlastními daty může také obsahovat omezení na sloupce (constraints) a také informaci o primárním klíči dále může mít tabulka také další vlastnosti (extended properties) tyto informace se nazývají schéma tabulky

  11. DataColumn • třída pro sloupec v tabulce • každý sloupec je identifikován jménem a má sadu vlastností • ColumnName – jméno (pokud není nastaveno konstruktorem, je automaticky ColumnN) • AutoIncrement(Seed|Step) – automatické generování číselné hodnoty • DataType – typ sloupce (jeden z vyjmenovaných .NETovských typů) • DefautValue – implicitní hodnota

  12. DataColumn mohou být vytvořeny ručně nebo v kódu nebo generovány runtimem datový typ nelze změnit poté, co byla do tabulky načtena data jsou to hodnotové typy jako je bool, int, DateTime, TimeSpan, Double, Decimal a podobně

  13. DataRow • třída reprezentující vlastní data načtená v tabulce • protože představují offline přístup k datům uloženým v databázi nebo jinde jsou verzované (enum DataRowVersion) • Current – poslední platně uložená hodnota • Default – implicitní hodnota • Original – hodnota původně načtená z externího zdroje • Proposed – hodnota v době mezi voláními BeginEdit a EndEdit nebo CancelEdit

  14. DataRow • k jednotlivým položkám v řádku je možno přistupovat pomocí indexerů, které mají 1 nebo 2 parametry • první je objekt typu DataColumn nebo Int32 nebo String • druhý může být požadovaná verze řádku např. row[“Jmeno”, DataRowVersion.Current] • pomocí indexerů je možno hodnoty číst nebo měnit

  15. DataRow • každý řádek má také vlastnost RowState, která určuje, jakou operaci je třeba provést, aby se řádek uložil zpátky do databáze (enum DataRowState) • Added – řádek byl přidán (INSERT) • Deleted – řádek byl vymazán metodou Delete(), je stále v DataTable, ale při uložení do databáze bude smazán • Detached – po vytvoření nebo volání Remove() • Modified – došlo ke změně v některém sloupci • Unchanged – od posledního volání AcceptChanges nedošlo ke změně

  16. DataRow • pokud se mění data, jsou na příslušné tabulce vyvolávány události jako RowChanged, RowChanging, ColumnChanged a ColumnChanging • poslední lze použít k validaci dat, má parametr typu DataColumnChangeEventArgs, který má vlastnost ProposedValue • pokud nejsou hodnoty v pořádku, je možno nastavit vlastnosti RowError a ColumnError a vlastnost HasErrors příslušné tabulky

  17. Constraints • umožňují zadávat omezení na jednotlivé sloupce • jsou reprezentovány objekty • UniqueConstraint • ForeignKeyConstraint • UniqueConstraint – pojmenované omezení určující, že musí být každá hodnota ve sloupci jedinečná • DataTable má vlastnost PrimaryKey • ForeignKeyConstraint – omezení při updatu a mazání na dvojici nebo dvou kolekcích

  18. XML Schema speciální XML soubor, který popisuje schéma – sloupce odpovídají elementům, dají se nastavit jejich typy, omezení, relace a podobně má příponu xsd, lze jej napsat ručně nebo nechat vygenerovat z již nastaveného DataSetu

  19. XML Schema • vygenerovaný kód obsahuje • pro každý komplexní element tabulku odvozenou od DataTable • pro každý jednodychý element třídu odvozenou od DataColumn s nastavenými vlastnostmi podle atributů • celou řadu dalších složek jako přístupové vlastnosti položek v řádku, přetížené metody pro přidání řádku • vše je silně typované (tj. místo row[“jmeno”] je row.jmeno)

  20. XML

  21. DTD

  22. XSD

  23. Uložení a načtení z/do XML Uložení DataSetu do XML pomocí metod GetXML a WriteXML Schéma lze z DataSetu uložit metodami GetXMLSchema a WriteXMLSchema metoda Get vždycky vrací řetězec,metoda Write píše do souboru Data se do DataSetu načtou metodou ReadXML

  24. DataSet a komunikace ve vícevrstvé aplikaci je možno používat metody pro komunikaci pomocí DataSetů metoda Copy vrátí přesnou kopii DataSetu metoda Clone vrátí prázdný DataSet s přesně stejným schématem metoda GetChanges vrátí DataSet, který obsahuje pouze řádky v jistém stavu (implicitně Deleted|Modified|Added) metoda Merge umožňuje spojit DataSety nebo vnořit tabulky či řádky do DataSetu

  25. Merge

  26. Merge • umožňuje spojit dva DataSety do jednoho • pokud se liší schémata, je buď vyhozena výjimka, nebo jsou spojena i schémata (parametrMissingSchemaAction .(Error|Add|Ignore|AddWithKey)) • řádky ve stavu Modified, Unchanged a Deleted se spojí podle stejné Current hodnoty primárního klíče • podle hodnoty parametru PreserveChanges se pozná, jestli mají být odlišné hodnoty v cílovém datasetu přepsány (false) nebo změněny a označeny jako modifikované

  27. Merge při spojování se dočasně nekontrolují omezení pokud se po spojení některá omezení nedají dodržet, je EnforceConstraints celého DataSetu nastaveno na false a příslušné řádky jsou označeny jako chybné

  28. Filtrování a řazení • je možno vytvářet pohledy na jednotlivé tabulky v DataSetu pomocí tříd DataView a DataViewManager • tyto pohledy se nejčastěji používají k navazování na prvky uživatelského rozhraní • DataView je v podstatě definován souhrnem následujích vlastností • Table – připojená tabulka (jenom jedna) • RowFilter – řetězec určující filtr na řádcích • RowStateFilter – stavy řádků • Sort – podle čeho řadit a jak

  29. Filtrování a řazení - RowFilter jedna nebo více podmínek spojených logickými operátory (AND, OR, NOT) podmínky jsou tvaru VyrazL OP VyrazP, OP je např. <, BETWEEN, <>, IS NULL, IN(a,b,c), LIKE VyrazL je obvykle jméno sloupce VyrazP je výraz s hodnotou vhodného typu

  30. Filtrování a řazení - RowFilter lze použít také některé funkce jako agregační (Sum, Avg, Min, Max, Count), logické (IsNull, IIF) nebo řetězcové (SubString, Len), příp. operátory +, * apod.

  31. RowStateFilter • umožňuje vybrat jenom řádky, které jsou v nějakém stavu • enum DataViewRowState, hodnoty Added, Deleted, Modified(Current|Original), None, Unchanged, (Current|Original)Rows

  32. Sort výraz pro řazení se skládá ze jména sloupce a specifikace ASC pro vzestupné řazení a DESC pro sestupné výrazy je možno kombinovat (hnízdit) tak, že se jich více napíše do jednoho výrazu oddělených čárkou pokud se kdekoliv ve jménu sloupce vyskytuje mezera, je toto jméno nutno uzavřít do hranatých závorek ([])

  33. Filtrování a řazení - DataView • řádky v DataView jsou typu DataRowView, DataView je kolekce řádků • řádky je možno přidávat metodou AddNew • vlastnosti AllowEdit, AllowDelete a AllowNewurčují, jestli se dají provádět uvedené operace • řádky je možno hledat dle hodnot v řazených sloupcích metodami Find a FindRows • metoda CreateChildView řádku vytvoří pohled z jeho dětských řádků, parametr je objekt relace • k řádkům je možno přistupovat, jako by to byly řádky v tabulce (měnit je, mazat ap.)

  34. Filtrování a řazení • například DataView dw = newDataView( ds.Tables[“Jmeno”], “cislo < 3 AND jmeno LIKE ‘Karel’”, “[datum narozeni], jmeno ASC”, DataViewRowState.CurrentRow)

  35. Filtrování a řazení • metoda Select třídy DataTable vrátí pole řádků podle RowFilter řetězce, seřazené podle Sort řetězce, v příslušné verzi rows = table.Select(“Pocet > 5”, “Poradi ASC”); • metoda Compute umožňuje spočítat výsledek agregovaného dotazu total = table.Count(“SUM(penize)”, “poradi < 10”);

  36. XML a .NET - standardy • .NET podporuje celou řadu XML standardů • XML 1.0 včetně DTD • XML Schemas • XPath výrazy • XSLT transformace • DOM Level 1 a 2 Core • SOAP 1.1 • jejich popis lze nalézt na www.w3.org

  37. System.XML základní jmenný prostor pro zpracování XML souborů je System.XML obsahuje třídy pro různý přístup ke XML souborům a jejich složkám proudové třídy: XMLReader, XMLWriter třídy pro logickou strukturu dokumentu: XMLNode, XMLDocument, XMLDataDocument v dalších jmenných prostorech speciální třídy (XPath, XSLT)

  38. XMLReader • abstraktní třída, od níž dědí konkrétní třídy, které se liší zdrojem dat nebo další funkcionalitou (validace) • XmlNodeReader – načítá z XMLNode • XmlTextReader – načítá z proudu (souboru) • XmlValidatingReader – poskytuje validaci • XmlReader má metodu Create s 9 verzemi, která umožňuje vytvořit proud nad souborem nebo jiným proudem

  39. XMLReader • metoda Create může mít parametr typu XmlReaderSettings: třída s vlastnotmi pro nastavení čtení • IgnoreComments, IgnoreWhiteSpace • Schemas • ValidationType, ValidationFlags

  40. XmlReader – Read metody • základní metoda Read přesune kurzor na další element, pokud to nejde, vrátí false • proměnná readeru slouží pak k přístupu k uzlu pomocí různých metod • metoda HasValue a vlastnost Value • metoda HasAttributes a metoda GetAttribute nebo indexery • IsStartElement a ReadStartElement

  41. XMLReader • další čtecí metody slouží ke specializovanému čtení • ReadElementString - načte obsah elementu obsahujícího jednoduchou textovou hodnotu, jinak vyhodí výjimku • silně typované metody podle vzoru ReadElementContentsAsJmenoTypu (např. ReadElementContentsAsDouble), nebo vyhodí výjimku • metoda MoveToContent: posune kurzor na nejbližší obsahový element (přeskočí např. poznámky) a vrátí jeho typ • další jako ReadString, ReadNextToSibling, ReadStartElement a podobně

  42. Čtení atributů metoda HasAttributes určí, má-li element atributy vlastnost AttributeCount obsahuje počet atributů metoda GetAttribute vrátí hodnotu atributu na základě indexu nebo jména atributu stejnou funkci a parametry mají indexery třídy XmlReader metody MoveToFirstAttribute a MoveToNextAttribute umožňují iterovat atributy

  43. Validace XmlReader umí provést validaci vzhledem ke XML schématu schéma se uloží do vlastnosti XmlSchemaSet třídy XmlReaderSettings, její vlastnost XsdValidate se nastaví na true XmlReaderSettings má událost ValidationEventHandler, která se vyvolá při chybě nebo varování při validaci (argument této události má vlastnost Severity)

  44. XMLWriter • umožňuje zapisovat XML data do proudu • provádí se dopředně bez cachování • paramnetry zápisu se nastaví pomocí třídy XmlWriterSettings, která má vlastnosti jako • Indent • NewLineOnAttributes • Encoding • NewLine • konstruktor této třídy má parametr jméno souboru či třídu proudu a nepovinně nastavení

  45. XmlWriter • má řadu metod typu Write<neco> jako • WriteStartDocument • WriteStartElement • Write(Element|Attribute)String • WriteEndElement • WriteEndDocument • WriteCData, WriteComment, WriteChars • a celou řadu dalších • je třeba dávat pozor na zanoření elementů a jiné podobné věci

  46. DOM v .NETu • DOM (Document Object Model) je standard popisující přístup k XML dokumentu • přístup pomocí reprezentace dokumentu v paměti • dokument je reprezentovám jako strom uzlů, uzel je objekt třídy XmlNode • standard definuje • jak je dokument reprezetován • jak je možno přistupovat k jeho částem

  47. <?xml version="1.0"?> <books> <book> <author>Carson</author> <price format="dollar">31.95</price> <pubdate>05/01/2001</pubdate> </book> <pubinfo> <publisher>MSPress</publisher> <state>WA</state> </pubinfo> </books>

  48. Strom dokumentu

  49. Třídy dědící od XmlNode • jednotlivé třídy představují složky dokumentu • přímo od XmlNode dědí • XmlDocument: celý dokument • XmlDocumentFragment: část stromu dokumentu • XmlAttribute: atribut • XmlNotation a XmlEntity • a XmlLinkedNode: pro přístup k následujícímu a předchozímu uzlu, od něj dědí zejm. • XmlElement: element v dokumentu • pomocná třída XmlNodeList představuje seznam uzlů

More Related