ado.net, dáta, xml,triedy,
DESCRIPTION
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 - PowerPoint PPT PresentationTRANSCRIPT
YOUR LOGO
ADO.NET, Dáta, XML,Triedy,...
YOUR LOGO
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ů
YOUR LOGO
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,
YOUR LOGO
ADO.NET a .NET Framework
Microsoft .NET Framework
Common Language Runtime
Base Classes
Web Services User Interface
Data and XML
ADO.NET XML ... ...
YOUR LOGO
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
YOUR LOGO
.NET Data Providers Hierarchie
System.Data
.OleDb.SqlClientOleDbCommandOleDbConnectionOleDbDataReaderOleDbDataAdapter
SqlCommandSqlConnectionSqlDataReader
SqlDataAdapter
YOUR LOGO
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
YOUR LOGO
Třídy poskytovatelů
YOUR LOGO
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,...)
YOUR LOGO
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
YOUR LOGO
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
YOUR LOGO
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ě
YOUR LOGO
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
YOUR LOGO
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
YOUR LOGO
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ě
YOUR LOGO
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
YOUR LOGO
Constraints
umožňují zadávat omezení na jednotlivé sloupcejsou 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 PrimaryKeyForeignKeyConstraint – omezení při updatu a mazání na dvojici nebo dvou kolekcích
YOUR LOGO
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
YOUR LOGO
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)
YOUR LOGO
XML
YOUR LOGO
DTD
YOUR LOGO
XSD
YOUR LOGO
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
YOUR LOGO
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
YOUR LOGO
Merge
YOUR LOGO
Merge
umožňuje spojit dva DataSety do jednohopokud se liší schémata, je buď vyhozena výjimka,
nebo jsou spojena i schémata (parametr MissingSchemaAction
.(Error|Add|Ignore|AddWithKey)) řádky ve stavu Modified, Unchanged a Deleted se
spojí podle stejné Current hodnoty primárního klíčepodle 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é
YOUR LOGO
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é
YOUR LOGO
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
YOUR LOGO
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
YOUR LOGO
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.
YOUR LOGO
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
YOUR LOGO
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 ([])
YOUR LOGO
Filtrování a řazení - DataView
řádky v DataView jsou typu DataRowView, DataView je kolekce řádků
řádky je možno přidávat metodou AddNewvlastnosti AllowEdit, AllowDelete a AllowNew
určují, jestli se dají provádět uvedené operace řádky je možno hledat dle hodnot v řazených
sloupcích metodami Find a FindRowsmetoda CreateChildView řádku vytvoří pohled z
jeho dětských řádků, parametr je objekt relacek řádkům je možno přistupovat, jako by to byly řádky
v tabulce (měnit je, mazat ap.)
YOUR LOGO
YOUR LOGO
Filtrování a řazení
například
DataView dw = new DataView(
ds.Tables[“Jmeno”],
“cislo < 3 AND jmeno LIKE ‘Karel’”,
“[datum narozeni], jmeno ASC”,
DataViewRowState.CurrentRow)
YOUR LOGO
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”);
YOUR LOGO
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
YOUR LOGO
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)
YOUR LOGO
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
YOUR LOGO
XMLReader
metoda Create může mít parametr typu XmlReaderSettings: třída s vlastnotmi pro nastavení čtení-IgnoreComments, IgnoreWhiteSpace
-Schemas
-ValidationType, ValidationFlags
YOUR LOGO
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
YOUR LOGO
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ě
YOUR LOGO
Č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
YOUR LOGO
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)
YOUR LOGO
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í
YOUR LOGO
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
YOUR LOGO
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
YOUR LOGO
<?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>
YOUR LOGO
Strom dokumentu
YOUR LOGO
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ů
YOUR LOGO
Třída XmlNode
reprezentuje obecný uzel dokumentu
má vlastnosti, které umožňují procházení dokumentu – odkazují na uzly ve vztahu k tomuto uzlu- ChildNodes, (First|Last)Child, HasChildNodes
- indexer
- (Previous|Next)Sibling
- ParentNode
vlastnosti pro extrakci XML dat z uzlu- OuterXml, InnerXml, InnerText
YOUR LOGO
XmlNode
vlastnosti pro zjištění XML vlastností uzlu- Name, NodeType, NamespaceUri, Prefix, Value
metody pro přidávání,ubírání a nahrazování uzlů na jistých pozicích- AppendChild, PrependChild
- InsertAfter, InsertBefore
- RemoveChild, RemoveAll
- ReplaceChild
YOUR LOGO
XmlNode
metody pro vybrání dětských uzlů pomocí XPath dotazu- SelectSingleNode, SelectNodes
metody pro serializaci uzlu do XmlWriteru- WriteContentTo, WriteTo
všechny tyto složky jsou k disposici (případně přepsané) v odvozených třídách
YOUR LOGO
XMLDocument
třída reprezentující celý dokument
má metody pro načtení dokumentu z proudu do paměti-Load pro načtení z proudu (soubor, XmlReader)-LoadXml pro načtení z řetězce
dále má metody pro přístup k obsahu dokumentu-GetElementByTagName, GetElementById
YOUR LOGO
XmlDocument
mnoho metod a vlastností pro přístup k uzlům dokumentu je zděděno od XmlNode a využívá toho, že XmlDocument je speciální případ uzlu
jiné jsou specifické- DocumentElement: kořenový element
- DocumentType: DOCTYPE deklarace
- Schemas: asociovaná schémata
YOUR LOGO
XmlDocument
metody pro vytváření uzlů: jejich jména začínají na Create, vytvoří uzel v kontextu dokumentu, ale nepřidají ho do stromu- CreateElement, CreateAttribute, CreateComment
metody pro serializaci dokumentu- Save a metody zděděné od XmlNode
YOUR LOGO
Speciální třídy
XmlElement obsahuje navíc složky pro práci s atributy- vlastnosti HasAttributes a Attributes
- metody RemoveAllAttributes, RemoveAttribute
- metody SetAttribute, SetAttributeNode
YOUR LOGO
XPath
jmenný prostor System.Xml.Xpath
centrální třída je XPathNavigator
poskytuje se především rychlý read only přístup k obsahu dokumentu založený na kurzoru
je však možné dokument i modifikovat
XPath deklarativně popisuje uzly v DOMu pomocí speciálních výrazů
YOUR LOGO
Příklady XPath výrazů
/book/chapter/titleelement title v elementu chapter v top-level elementu book
/book/*/titleelement title v jakémkoliv elementu v top-level elementu book
/book//title
element title kdekoliv v top-level elementu book
YOUR LOGO
Příklady XPath výrazů
para/quote quote v paragraph v aktuálním elementu
./para/quotetotéž
../para/quote quote v para v rodiči aktuálního elementu
title|heading|label
kterýkoliv element z těchto tří
/book/chapter/@number
atribut number elementu chapter
YOUR LOGO
Příklady XPath výrazů
chapter[title]
chapter, který má dětský element title
chapter[title=“Bible]
chapter, který má title, který obsahuje text “Bible”
chapter[1]
první element chapter
para[@indent=“yes”]
para element, který má atribut s příslušnou hodnotou
YOUR LOGO
•/Studenti/Student - představuje všechny elementy Student, které jsou dceřinnými elementy (kořenového, dokumentového) elementu Studenti.
•/Studenti/Student/@Foto - představuje všechny atributy Foto v elementech Student, které jsou dceřinnými elementy (kořenového, dokumentového) elementu Studenti.
•//Student - představuje všechny elementy Student, které mohou být v libovolné úrovni ve stromu XML dokumentu.
•/Studenti/* - představuje všechny dceřinné elementy (kořenového,
Příklady XPath výrazů
YOUR LOGO
XPathNavigator
zapouzdřuje vlastní vykonávání dotazu v jazyce XPath
v daném okamžiku ukazuje na některý uzel dokumentu, má metody a vlatnosti uzlu
metody pro přesun na jiný uzel (MoveTo<neco>)-MoveTo: na pozici jiného navigátoru-MoveTo(Next|First)*Attribute-MoveToFirstChild, MoveToParent, MoveToRoot-MoveTo(First|Last|Next|Previous): procházení
mezi sourozenci
YOUR LOGO
XPathNavigator
metody pro výběr uzlu (vrací iterátor nebo XPathNavigtor ukazující na uzel)- berou jako parametr XPath výraz nebo výraz typu XPathNodeType (např. Element, Attribute ap.)
-Select: prostě vybere nějakou množinu uzlů-SelectSingleNode: vybere uzel-SelectAncestors, SelectDescendants: vybere všechny vhodné
předky či potomky-SelectChildren: vybere mezi dětmi
metoda Matches: vrátí true pokud současný uzel odpovídá danému dotazu
http://projektysipvz.gytool.cz/ProjektySIPVZ/Default.aspx?uid=725
YOUR LOGO
XSLT
standard umožňující transformovat XML dokumenty na základě jiných XML dokumentů
děje se pomocí šablon (template), každá- odpovídá uzlu ve zdrojovém dokumentu (XPath)
- obsahuje obsah, jímž se má tento uzel nahradit
- šablony se mohou navzájem volat, mohou se aplikovat rekurzivně a podobně
YOUR LOGO
System.Xml.Xsl
třídy pro použití XSL jsou ve jmenném prostoru System.Xml.Xsl
transformovat je možné dokument reprezentovaný třídou, která implementuje rozhraní IXPathNavigable, tj.-XmlDocument
-XmlDataDocument
-XPathDocument
YOUR LOGO
XslTransform
třída implementující vlastní transformaci
metodou Load se načte XSL dokument
metodou Transform, která má v základním případě parametr typu IXPathNavigable a parametr typu zapisovací znakový proud nebo XmlWriter se provede transformace
třída XsltArgumentList umožňuje přidávat k transformaci vlastní pojmenované argumenty a funkce