+ All Categories
Home > Documents > Prezent.ppt

Prezent.ppt

Date post: 08-Feb-2017
Category:
Upload: ngomien
View: 218 times
Download: 0 times
Share this document with a friend
47
22-06-16 1 Práce s databázemi (1) • .NET Framework poskytuje prostředky pro pří-stup k různým typům databází • Pro zpřístupnění konkrétní databáze je nutné se k ní nejprve připojit: – připojení lze realizovat pomocí některého z potom-ků abstraktní třídy DbConnection • Mezi potomky třídy DbConnection patří: SqlConnection: • slouží pro připojení k databázi SQL serveru
Transcript
Page 1: Prezent.ppt

23-05-04 1

Práce s databázemi (1)• .NET Framework poskytuje prostředky pro pří-

stup k různým typům databází• Pro zpřístupnění konkrétní databáze je nutné se

k ní nejprve připojit: – připojení lze realizovat pomocí některého z potom-

ků abstraktní třídy DbConnection• Mezi potomky třídy DbConnection patří:

– SqlConnection:• slouží pro připojení k databázi SQL serveru

Page 2: Prezent.ppt

23-05-04 2

Práce s databázemi (2)– OleDbConnection:

• pro připojení k databází podporující OLE DB, např. MS Access

– OdbcConnection:• umožňuje připojení k databázi podporující ODBC (Open

Database Connectivity)– OracleConnection:

• slouží pro připojení k databázi Oracle– EntityConnection:

• určena pro připojení ke konceptuálnímu modelu a zdroji dat

Page 3: Prezent.ppt

23-05-04 3

Práce s databázemi (3)• Pro reprezentaci příkazů SQL nebo uložených

procedur, které mají být spuštěny jsou k dispo-zici potomci abstraktní třídy DbCommand

• Tyto třídy jsou specifické pro konkrétní data-báze a patří mezi ně:– SqlCommand– OleDbCommand– OdbcCommand– OracleCommand– EntityCommand

Page 4: Prezent.ppt

23-05-04 4

Práce s databázemi (4)• Pro načítání řádků ze zdroje dat lze využít po-

tomky abstraktní třídy DbDataReader, např:– SqlDataReader– OleDbDataReader– OdbcDataReader– OracleDataReader– EntityDataReader

• Poznámka:– třídy založené na DbConnection, DbCommand

a DbDataReader se označují jako Data Providers (poskytovatelé dat)

Page 5: Prezent.ppt

23-05-04 5

Třída SqlConnection (1)• Definována ve jmenném prostoru System.Data.SqlClient

• Reprezentuje spojení s databázovým serverem SQL

• Je definována s modifikátorem sealed nel-ze na základě ní definovat třídu jako jejího po-tomka

• Připojení k SQL serveru je realizováno zadáním tzv. připojovacího řetězce (connection string)

Page 6: Prezent.ppt

23-05-04 6

Třída SqlConnection (2)• Připojovací řetězec může být zadán:

– v době volání konstruktoru (jako parametr)– pomocí vlastnosti ConnectionString– příklad: ”server=localhost;user=root;database=test”

• Poskytuje metody:– Open:

• otevře spojení s databázovým serverem– Close:

• uzavře dříve otevřené spojení s databázovým serverem

Page 7: Prezent.ppt

23-05-04 7

Třída SqlConnection (3)• Otevření a uzavření databáze je časově poměrně

náročná operace je využíván fond připojení• Poznámka:

– parametry fondu připojení lze nastavit v připojova-cím řetězci

Page 8: Prezent.ppt

23-05-04 8

Třída SqlCommand (1)• Definována ve jmenném prostoru System.Data.SqlClient

• Reprezentuje příkaz SQL (nebo uloženou proce-duru), který se má spustit na SQL serveru

• Definována s modifikátorem sealed• SQL příkaz, který se má provést může být spe-

cifikován:– v době volání konstruktoru– prostřednictvím vlastnosti CommandText

Page 9: Prezent.ppt

23-05-04 9

Třída SqlCommand (2)• Hodnota vlastnosti CommandText je interpre-

tována dle hodnoty vlastnosti CommandType:– Text: příkaz SQL (implicitní hodnota)– TableDirect: jméno tabulky– StoredProcedure: jméno uložené procedury

• Pro provedení příkazu SQL je rovněž nutné uvést databázové spojení (získané při vytváření instance třídy SqlConnection)

• Spojení lze zadat:– v době volání konstruktoru– pomocí vlastnosti Connection

Page 10: Prezent.ppt

23-05-04 10

Třída SqlCommand (3)• Spuštění příkazu se provádí voláním metody:

– ExecuteNonQuery:• určena pro příkazy, které nevrací žádnou hodnotu

(např. INSERT, DELETE apod.)• vrací počet ovlivněných řádků

– ExecuteReader:• používáno v případě, že SQL příkaz vrací množinu dat

(např. příkaz SELECT)• vytváří (vrací) instanci třídy SqlDataReader, pomocí

níž je možné získat vrácená data

Page 11: Prezent.ppt

23-05-04 11

Třída SqlCommand (4)– ExecuteScalar:

• používána pro příkazy, které vrací jednu hodnotu (např. SELECT s agregační funkcí)

• vrací první sloupec prvního řádku ve výsledné množině nebo null (pokud výsledná množina je prázdná)

• vrácená hodnota je typu object

Page 12: Prezent.ppt

23-05-04 12

Třída SqlCommand (5)• Třída SqlCommand obsahuje mimo jiné vlast-

nost Parameters:– specifikuje kolekci parametrů spojených s příkazem

SQL– přidání parametru do kolekce společně s jeho hod-

notou se provádí pomocí metody AddWithValue• Poznámka:

• parametry jsou (v příkazu SQL) zapisovány pomocí zástupných značek uvozených symbolem @

Page 13: Prezent.ppt

23-05-04 13

Třída SqlDataReader (1)• Definována ve jmenném prostoru System.Data.SqlClient

• Umožňuje načítání (zpřístupňování) řádků z da-tabáze SQL

• Prochází množinu dat po jednotlivých (řádcích) záznamech

• Její instance je vrácena jako výsledek volání metody ExecuteReader

• Pro přesun na následující záznam (řádek) slouží metoda Read

Page 14: Prezent.ppt

23-05-04 14

Třída SqlDataReader (2)• Metoda Read vrací hodnotu:

– true: jestliže existují další řádky– false: v opačném případě

• Jednotlivé atributy záznamů jsou přístupné po-mocí indexu (indexování začíná vždy od nuly) nebo názvu sloupce zapsaného v hranatých závorkách, případně pomocí metod Get…

• Po ukončení práce s objektem třídy SqlData-Reader je zapotřebí provést jeho uzavření po-mocí metody Close

Page 15: Prezent.ppt

23-05-04 15

Regulární výrazy• Regulární výraz (regular expression, regex)

je řetězec popisující množinu řetězců• Představuje vzor (šablonu), který je porovná-

ván se vstupním textem• Nejčastěji používány při vyhledávání textu

nebo manipulaci s textem• Regulární výraz se skládá z:

– literálů textu, které se mají shodovat– speciálních znaků (metaznaků), které nejsou sou-

částí hledaného textu, ale slouží pro popis alter-nativ, množin, počtů výskytů

– přepínačů

Page 16: Prezent.ppt

23-05-04 16

Syntaxe regulárních výrazů (1)

. odpovídá libovolnému znaku k.s – kus, kos, k2s atd.\ vrací metaznaku původní význam a\+b – a+b

Tečka, zpětné lomítko

? minimálně 0x, maximálně 1x ku?s – ks, kus* minimálně 0x, maximálně bez omezení halo* – hal, halo, halooo

Kvantifikátory – předcházející znak se musí vyskytovat …

+ minimálně 1x, maximálně bez omezení halo+ – halo, halooo{n} právě n-krát 10{6} – 1000000{m,n} minimálně m-krát, maximálně n-krát 10{2,3} – 100, 1000{n,} minimálně n-krát 10{2,} – 100, 1000, 10000

Page 17: Prezent.ppt

23-05-04 17

Syntaxe regulárních výrazů (2)Skupiny znaků – odpovídá[] jednomu znaku v závorkách [abc] – a, b, c

[^] jednomu znaku, neuvedenémuv závorkách

[^abc] – libovolný znak kromě a, b, c

[-] jednomu znaku z rozsahu znaků [a-z] – malá písmena abecedy

\s bílému znaku (\n, \r, \t, mezera aj.) a\sb – a b, ale ne ab\S jinému než bílému znaku a\Sb – a+b, ale ne a b\d desítkové číslici a\db – a2b, ale ne axb\D libovolnému znaku kromě desít. číslice a\Db – axb, ale ne a2b\w alfanumerickému znaku a podtržítku \w – 1, a, A, _, ale ne $, +\W nealfanum. znaku nebo podtržítku \W – $, !, ?, %, ale ne 2, b

Page 18: Prezent.ppt

23-05-04 18

Syntaxe regulárních výrazů (3)Hranice (ukotvení) – odpovídá pozici …

^ na začátku řetězce čí řádku ^Petr – najde Petr na začátku řetězce nebo řádku

$ na konci řetězce či řádku Pavel$ – najde Pavel na konci řetězce nebo řádku

\b na začátku či konci slova

\Bkos – najde kos ve slově kokos, ale ne v kost\B kdekoliv kromě začátku a konce slova

\bkos\b – nenajde kos ve slově kost či kokos

Page 19: Prezent.ppt

23-05-04 19

Syntaxe regulárních výrazů (4)Alternativy, seskupování, zpětné odkazy (reference)

|odděluje několik dílčích výrazů ahoj|nazdar – odpovídá

právě jednomu z pozdravů

()

subřetězec, na nějž lze aplikovat kvantifikátor

ko(ko)?s – odpovídá právě kos a kokos

odděluje několik dílčích subvýrazů a{b|c} – odpovídá právě ab a ac

subřetězec, na nějž se lze odkazovat (\d)\1, resp. (\d)$1 – odpovídá 11, 22, 33

Page 20: Prezent.ppt

23-05-04 20

Příklady regulárních výrazůRegulární výraza+ sekvence písmen a (1 a více znaků)

Odpovídá

a* sekvence písmen a (0 a více znaků)o?kov okov nebo kovtel(efon)? tel nebo telefontelef(on|ax)? telefon nebo telefax[0-9]|[1-9][0-9] čísla 0 – 99\d{2} sekvence dvou číslic desítkové soustavy (00, 01 – 98, 99)(19|20)\d{2} letopočty 1900 – 2099\d{2,6} sekvence dvou až šesti číslic

[^ ,.]+ neprázdná sekvence znaků, mezi nimiž nesmí být mezera, čárka nebo tečka

\d+0$ řetězec, který končí znakem 0, kterému předchází minimálně jedna číslice

Page 21: Prezent.ppt

23-05-04 21

Třída Regex (1)• Definována ve jmenném prostoruSystem.Text.RegularExpressions

• Reprezentuje neměnný (immutable) regulární výraz

• Lze ji využít např. k:– rozboru textu (parsing)– vyhledávání specifických vzorů textu– editování, nahrazování nebo mazání textových

podřetězců

Page 22: Prezent.ppt

23-05-04 22

Třída Regex (2)• Regulární výraz, s nímž chceme pracovat je

specifikován v době volání konstruktoru• Metody provádějící testování, zda text odpo-

vídá regulárnímu výrazu jsou definovány jako instanční i jako statické

• Mezi nejčastěji používané metody patří:– IsMatch:

• testuje, zda specifikovaný regulární výraz odpovídá zadanému řetězci

• vrací hodnotu typu bool

Page 23: Prezent.ppt

23-05-04 23

Třída Regex (3)– Match:

• hledá v zadaném řetězci první výskyt textu, který odpovídá specifikovanému regulárnímu výrazu

• vrací hodnotu typu Match, pomocí jejíž:– vlastnosti Success lze ověřit, zda odpovídající text byl,

resp. nebyl nalezen– vlastnosti Value je možné získat nalezený text– metody NextMatch lze hledat další výskyt textu (jež odpo-

vídá specifikovanému regulárnímu výrazu)

– Matches:• hledá v zadaném řetězci všechny výskyty textu, které

odpovídají specifikovanému regulárnímu výrazu• vrací hodnotu typu MatchCollection

Page 24: Prezent.ppt

23-05-04 24

Třída Regex (4)– Replace:

• provede náhradu všech výskytů textu (specifikova-ných regulárním výrazem) zadaným řetězcem

• vrací hodnotu typu string– Split:

• rozdělí vstupní řetězec na pozicích definovaných regulárním výrazem

• vrací pole řetězců

Page 25: Prezent.ppt

23-05-04 25

Reflexe (1)• Reflexe (Reflection) představuje proces ve-

doucí k získání informací o sestavách (assemblies) a datových typech, které jsou v nich definovány

• Umožňuje procházení a manipulaci s objek-tovým modelem reprezentujícím konkrétní aplikaci

• Každá aplikace pro .NET Framework je tvořena alespoň jednou sestavou (assembly)

Page 26: Prezent.ppt

23-05-04 26

Reflexe (2)• Sestava (assembly):

– tvoří základní (primární) stavební blok aplikace určené pro .NET Framework

– skládá se ze čtyřech prvků:• manifest, který obsahuje metadata o sestavě• metadata o typech uložených v assembly• kód v jazyce CIL (MSIL)• zdroje (resources)

• Metadata o obsažených typech a kód v jazyce CIL tvoří tzv. modul (module), který může obsahovat definice datových typů a jejich implementace

Page 27: Prezent.ppt

23-05-04 27

Reflexe (3)• Poznámka:

– sestava může obecně obsahovat více modulů– jednotlivé moduly jsou reprezentovány soubory

s příponou .netmodule• Manifest obsahuje např.:

– jednoduchý název sestavy– číslo verze sestavy– seznam souborů, které tvoří danou sestavu– seznam datových typů, které tvoří danou sestavu

a informaci, ke kterému modulu v sestavě je kon-krétní typ připojen

Page 28: Prezent.ppt

23-05-04 28

Reflexe (4)• Každá aplikace pro .NET Framework běží

v tzv. aplikační doméně (application domain):– představuje izolované běhové prostředí– obdoba procesu známého z Windows API– není popsána metadaty– je reprezentována třídou AppDomain (definová-

na ve jmenném prostoru System)• Třída AppDomain definuje mimo jiné:

– statickou vlastnost CurrentDomain:• poskytuje přístup k aktuální aplikační doméně

– metodu GetAssemblies:• vrací (v podobě pole) seznam zavedených sestav

Page 29: Prezent.ppt

23-05-04 29

Reflexe (5)• Pro využití možností reflexe jsou k dispozici

následující třídy:Object

Module

MemberInfo

Assembly

FieldInfo

PropertyInfo

MethodBase

EventInfo

Type

ConstructorInfoMethodInfo

AssemblyName

ParameterInfo

Abstraktní třída

Page 30: Prezent.ppt

23-05-04 30

Reflexe (6)• Třída Assembly:

– zapouzdřuje sestavu, tj. samopopisující se blok aplikace CLR

– umožňuje: • zavést sestavu• zjistit metadata a součásti sestavy• identifikovat datové typy, jež jsou v sestavě obsaženy• vytvářet instance obsažených datových typů

• Třída AssemblyName:– umožňuje zjistit informace o identitě sestavy– např.: verze, informace o kultuře apod.

Page 31: Prezent.ppt

23-05-04 31

Reflexe (7)• Třída MemberInfo:

– představuje předka pro třídy, které poskytují informace o členech třídy, tj. o:

• datových položkách – FieldInfo• vlastnostech – PropertyInfo• událostech – EventInfo

– mezi potomky MemberInfo patří i třídy:•MethodBase: předek pro třídy:

– ConstructorInfo: poskytuje informace o konstruktorech– MethodInfo: poskytuje informace o metodách

•Type:– reprezentuje deklarace datových typů (tříd, rozhraní, polí,

hodnotových typů, výčtových typů, generik apod.)– představuje metadata typů

Page 32: Prezent.ppt

23-05-04 32

Reflexe (8)• Třída Module:

– provádí reflexi modulu– zpřístupňuje modul v rámci sestavy

• Třída ParameterInfo:– poskytuje informace o atributech parametrů– např.: datové typy, implicitní hodnoty

• Poznámka:– všechny výše uvedené třídy (vyjma třídy Type)

jsou definovány ve jmenném prostoru System.Reflection

Page 33: Prezent.ppt

23-05-04 33

Třída Type (1)• Definována ve jmenném prostoru System• Poskytuje členy pro zpřístupnění metadat

daného datového typu• Abstraktní třída její instanci nelze vytvořit

voláním konstruktoru• Pro získání instance lze použít:

– volání metody GetType zděděné od třídy Object na konkrétní instanci třídynapř.:Person p = new Person();Type t = p.GetType();

Page 34: Prezent.ppt

23-05-04 34

Třída Type (2)– volání statické metody GetType třídy Type

např.:Person p = new Person();Type t = Type.GetType (”Namespace.Person”);

– operátor typeof:např.:Person p = new Person();Type t = typeof(Person);

Page 35: Prezent.ppt

23-05-04 35

Třída Type (3)• Mezi členy poskytované třídou Type patří

např.:– vlastnosti pro zjištění základních charakteristik

(rysů) daného datového typu, např.:•IsAbstract, IsArray, IsClass, IsEnum, IsGenericTypeDefinition, IsGenericParameter, IsInterface, IsPrimitive, IsSealed, IsValueType

– metody vracející pole obsahující požadované položky, např.:•GetConstructors, GetEvents, GetFields, GetInterfaces, GetMembers, GetMethods, GetNestedTypes, GetProperties

Page 36: Prezent.ppt

23-05-04 36

Dynamické vytvoření instance (1)• Na základě informací získaných pomocí re-

flexe je možné dynamicky vytvořit instanci třídy, která je definována v jiné sestavě

• Pro dynamické vytvoření instance lze využít statickou metodu CreateInstance třídy Activator

• Metoda CreateInstance:– umožňuje zadat parametry předávané konstrukto-

ru (v podobě pole s prvky typu object)– vrací odkaz na nově vytvořený objekt (vrácená

hodnota je typu object)

Page 37: Prezent.ppt

23-05-04 37

Dynamické vytvoření instance (2)• U dynamicky vytvořené instance lze např.:

– zpřístupnit vlastnosti, k čemuž je možné použít:• metodu GetProperty třídy Type:

– vrací hodnotu typu PropertyInfo• metodu GetValue, resp. SetValue třídy PropertyInfo:

– umožňuje přečíst, resp. zapsat hodnotu zadané vlastnosti

– vyvolat metodu pomocí:• metody GetMethod třídy Type:

– vrací hodnotu typu MethodInfo• metody Invoke třídy MethodInfo:

– provede vyvolání zadané metody– parametry jsou předávány jako pole s prvky typu object– vrácená hodnota je typu object

Page 38: Prezent.ppt

23-05-04 38

Expression trees (1)• Expression tree (strom výrazu) reprezentuje

kód ve stromové datové struktuře, kde každý uzel je výraz, např.:– volání metody– binární operace (např. x < y)

• Kód reprezentovaný stromem výrazu může být přeložen a spuštěn, což umožňuje:– dynamickou modifikaci spustitelného kódu– spouštění dotazů LINQ v různých databázích– vytváření dynamických dotazů

Page 39: Prezent.ppt

23-05-04 39

Expression trees (2)• Pro strom výrazu platí:

– vychází z jednoho uzlu na nejvyšší úrovni– vlastnosti tohoto uzlu se vážou na další uzly– každý další uzel může mít jeden nebo více podří-

zených uzlů, které tvoří parametry operace, kterou daný uzel reprezentuje

• Příklad:– uzel stromu výrazu může být operátor, který sčítá

dva operandy– každý z těchto operandů může být dalším uzlem ve

stromu výrazu, který zapouzdřuje další operace

Page 40: Prezent.ppt

23-05-04 40

Expression trees (3)• Uzly stromů výrazů jsou reprezentovány po-

mocí tříd, které jsou definovány jako násled-níci abstraktní třídy Expression

• Stromy výrazů mohou být vytvořeny:– na základě lambda výrazů:

• pomocí třídy Expression<TDelegate>– použitím API:

• využitím abstraktní třídy Expression• Poznámky (neměnnost):

– uzly ve stromu výrazu jsou neměnné (immutable)– strom výrazu lze změnit pouze sestavením nové-

ho stromu, který lze vytvořit z uzlů resp. podstro-mů existujícího stromu

Page 41: Prezent.ppt

23-05-04 41

Třída Expression<TD> (1)• Definována ve jmenném prostoru System.Linq.Expressions

• Slouží pro reprezentaci lambda výrazů v po-době stromů výrazů

• Vytvoření stromu výrazu se provede přiřa-zením lambda výrazu do proměnné typu Expression<TDelegate>

• Lze použít pouze pro jednořádkové lambda výrazy (expression lambdas), které na pravé straně neobsahují blok příkazů uzavřený mezi složenými závorkami (statement lambdas)

Page 42: Prezent.ppt

23-05-04 42

Třída Expression<TD> (2)• Definována jako následník třídy LambdaExpression

• Od svého předchůdce mimo jiné dědí násle-dující vlastnosti (dostupné pouze pro čtení):– Body:

• vrací tělo lambda výrazu– NodeType:

• vrací typ uzlu jako hodnotu enumeračního typu ExpressionType (např.: Add, Divide, Loop)

• určuje, který operátor tento uzel ve stromu výrazu reprezentuje

– Parameters:• obsahuje (v podobě kolekce) seznam parametrů lambda

výrazu

Page 43: Prezent.ppt

23-05-04 43

Třída Expression<TD> (3)– ReturnType:

• obsahuje typ hodnoty, kterou lambda výraz vrací

• Definuje metodu Compile, která přeloží kód reprezentovaný stromem výrazu do spu-stitelného delegáta

• Poznámky:– třída Expression<TDelegate> je definová-

na s modifikátorem sealed nelze na základě ní definovat potomky

– v roli parametrizovaného delegáta obvykle vystu-puje generický delegát Action nebo Func

Page 44: Prezent.ppt

23-05-04 44

Třída Expression<TD> (4)• Příklad:Expression<Func<double, double, double>> TriangleAreaExp = (a, b) => a * b / 2;

TriangleAreaExp

/

b

2*

a

Body

BinaryExpression

BinaryExpression

ParameterExpression ParameterExpression

Left Right

Left Right

ConstantExpression

Parameters

ba

[0] [1]

Page 45: Prezent.ppt

23-05-04 45

Třída Expression (1)• Definována ve jmenném prostoru System.Linq.Expressions

• Abstraktní třída, která obsahuje statické me-tody pro vytvoření uzlů specifického typu, např.:– Parameter:

• pro uzel, reprezentující proměnnou nebo parametr– Call:

• pro uzel reprezentující volání metody

• Podporuje rovněž práci s řídícími struktura-mi – cykly, větvení, bloky try – catch

Page 46: Prezent.ppt

23-05-04 46

Třída Expression (2)• Slouží jako bázová třída, od níž jsou odvoze-

ny třídy reprezentující ve stromech výrazů jednotlivé uzly

• Mezi potomky třídy Expression patří např.:– BinaryExpression:

• reprezentuje výraz, který má binární operátor– BlockExpression:

• reprezentuje výraz, který obsahuje sekvenci výrazů a ve kterém mohou být definovány proměnné

– ConditionalExpression:• reprezentuje výraz, který má podmíněný operátor

Page 47: Prezent.ppt

23-05-04 47

Třída Expression (3)– ConstantExpression:

• reprezentuje výraz, který má konstantní hodnotu– LambdaExpression:

• popisuje lambda výraz• předchůdce třídy Expression<TDelegate>

– LoopExpression:• reprezentuje nekonečný cyklus, který může být

ukončen pomocí break– MethodCallExpression:

• reprezentuje volání statické nebo instanční metody– ParameterExpression:

• reprezentuje pojmenovaný parametr