+ All Categories
Home > Documents > ASP.NET 4 a C# 2010, kniha 1

ASP.NET 4 a C# 2010, kniha 1

Date post: 23-Mar-2016
Category:
Upload: zoner-software-as
View: 255 times
Download: 12 times
Share this document with a friend
Description:
ASP.NET 4 a C# 2010, kniha 1
48
E N C Y K L O P E D I E Z O N E R P R E S S TVORBA DYNAMICKÝCH STRÁNEK PROFESIONÁLNĔ TVORBA DYNAMICKÝCH STRÁNEK PROFESIONÁLNĔ KNIHA KNIHA 1 1 ASP.NET 4 ASP.NET 4 a C# 2010 a C# 2010 Matthew MacDonald Adam Freeman Adam Freeman Mario Szpuszta Mario Szpuszta M tth M D M tth M D
Transcript
Page 1: ASP.NET 4 a C# 2010, kniha 1

E N C Y K L O P E D I E Z O N E R P R E S S

TVORBA DYNAMICKÝCH STRÁNEK PROFESIONÁLNTVORBA DYNAMICKÝCH STRÁNEK PROFESIONÁLN

KNIHAKNIHA 11

KNIHA

1

TVOR

BA DYN

AMICKÝ

CH STR

ÁNEK PROFESION

ÁLN

ASP.NET 4 ASP.NET 4 a C# 2010a C# 2010

ASP.NET 4 a C# 2010

M a t t h e w M a c D o n a l d A d a m F r e e m a n A d a m F r e e m a n

M a r i o S z p u s z t aM a r i o S z p u s z t a

M t t h M DM t t h M D

KNIHA 1

Page 2: ASP.NET 4 a C# 2010, kniha 1
Page 3: ASP.NET 4 a C# 2010, kniha 1

Matthew MacDonald, Adam Freeman, Mario Szpuszta

ASP.NET 4 a C# 2010tvorba dynamických stránek

profesionálně, kniha 1

Page 4: ASP.NET 4 a C# 2010, kniha 1

Pro ASP.NET in C# 2010, Fourth EditionMatthew MacDonald, Adam Freeman a Mario Szpuszta

Original edition copyright © 2010 by Matthew MacDonald, Adam Freeman, and Mario Szpuszta. Czech edition copyright © 2011 by ZONER software, a.s. All rights reserved. No part of this work may be reproduced or transmitted in any form or by any means, electronic or mechanical, including photocopying, recording, or by any information storage or retrieval system, without the prior written permission of the copyright the publisher.

Copyright originálního vydání © 2010 Matthew MacDonald, Adam Freeman a Mario Szpuszta. Copyright českého vydání © 2011 ZONER software, a.s.. Všechna práva vyhrazena. Žádná část této publikace nesmí být reprodukována nebo předávána žádnou formou nebo způsobem, elektronicky ani mechanicky, včetně fotokopií, natáčení ani žádnými jinými systémy pro ukládání bez výslovného svolení držitele autorských práv.

ASP.NET 4 a C# 2010 – tvorba dynamických stránek profesionálně, kniha 1Autor: Matthew MacDonald, Adam Freeman, Mario Szpuszta

Copyright © ZONER software, a.s. Vydání první v roce 2011. Všechna práva vyhrazena.

Zoner PressKatalogové číslo: ZR1003

ZONER software, a.s.Nové sady 18, 602 00 Brno

Překlad: RNDr. Jan PokornýOdpovědný redaktor: Miroslav KučeraŠéfredaktor: Ing. Pavel KristiánDTP: Miroslav Kučera, obálka: Lenka Křížová

Zdrojové soubory ke knize: http://zonerpress.cz/download/aspnet4-a-c2010.zip

Bonusové kapitoly:http://www.zonerpress.cz/download/bonusove-kapitoly-aspnet.zip

Informace, které jsou v této knize zveřejněny, mohou byt chráněny jako patent. Jména produktů byla uvedena bez záruky jejich volného použití. Při tvorbě textů a vyobrazení bylo sice postupováno s maximální péčí, ale přesto nelze zcela vyloučit možnost výskytu chyb. Vydavatelé a autoři nepřebírají právní odpovědnost ani žádnou jinou záruku za použití chybných údajů a z toho vyplývajících důsledků. Všechna práva vyhrazena. Žádná část této publikace nesmí být reprodukována ani dis-tribuována žádným způsobem ani prostředkem, ani reprodukována v databázi či na jiném záznamovém prostředku či v jiném systému bez výslovného svolení vydavatele, s výjimkou zveřejnění krátkých částí textu pro potřeby recenzí.

Veškeré dotazy týkající se distribuce směřujte na:

Zoner Press ZONER software, a.s Nové sady 18, 602 00 Brno

tel.: 532 190 883 e-mail: [email protected] www.zonerpress.cz

ISBN 978-80-7413-131-8

Page 5: ASP.NET 4 a C# 2010, kniha 1

5

Obsah O autorech 18

O odborných korektorech 18

Úvod 19

Rozdělení knihy 19

Komu je tato kniha určena? 21

Co potřebujete, abyste mohli pracovat s touto knihou? 21

Sdělte nám svůj názor 21

Zdrojové kódy 22

Bonusové kapitoly 22

Část I – Základy ASP.NET 23

Kapitola 1 Úvod do ASP.NET 25

Sedm pilířů ASP.NET 25

První pilíř: ASP.NET je integrováno s .NET Frameworkem 25

Druhý pilíř: ASP.NET se neinterpretuje, ale kompiluje 26

Třetí pilíř: ASP.NET je vícejazyčné 28

Čtvrtý pilíř: ASP.NET běží uvnitř společného runtime jazyků 30

Pátý pilíř: ASP.NET je objektově orientované 30

Šestý pilíř: ASP.NET podporuje všechny prohlížeče 33

Sedmý pilíř: ASP.NET se snadno nasazuje a konfi guruje 33

Evoluce ASP.NET 34

ASP.NET 1.0 a 1.1 34

ASP.NET 2.0 34

ASP.NET 3.5 35

ASP.NET 4 38

Silverlight 41

Shrnutí 41

Kapitola 2 Visual Studio 43

Úvod do Visual Studia 44

Weby a webové projekty 45

Vytvoření webu bez projektu 45

Navrhování webové stránky 50

Page 6: ASP.NET 4 a C# 2010, kniha 1

6

Integrované vývojové rozhraní Visual Studia 56

Průzkumník řešení 58

Okno dokumentu 60

Toolbox 60

Seznam chyb a seznam úkolů 61

Průzkumník serveru 62

Editor kódu 64

Přidání referencí na assembly 65

IntelliSense a osnova 68

Vylepšení ve Visual Studiu 2010 70

Model vytváření kódu 76

Jak se soubory kódu v pozadí připojují ke stránkám 78

Jak se připojují značky ovládacích prvků k proměnným stránky 79

Jak se připojují události k obsluhám událostí 81

Webové projekty 82

Vývoj založený na projektu 83

Vytvoření webového projektu 84

Migrace webu z předchozí verze Visual Studia 85

Ladění ve Visual Studiu 87

Ladění po krocích 88

Sledování proměnných 91

Pokročilé body přerušení 92

Web Development Helper 93

Shrnutí 95

Kapitola 3 Webové formuláře 97

Zpracování stránky 98

HTML formuláře 98

Dynamická uživatelská rozhraní 100

Událostní model ASP.NET 101

Automatické odesílání na server 102

Stav zobrazení 104

Soulad s XHTML 108

ID ovládacích prvků na straně klienta 114

Etapy zpracování webového formuláře 117

Inicializace frameworku stránky 118

Inicializace uživatelského kódu 118

Page 7: ASP.NET 4 a C# 2010, kniha 1

7

Validace 119

Zpracování událostí 119

Automatické vázání dat 120

Úklid 120

Ukázka toku zpracování stránky 120

Stránka jako kontejner ovládacích prvků 123

Zobrazení stromu ovládacích prvků 123

Záhlaví stránky 128

Dynamické vytváření ovládacích prvků 129

Třída Page 131

Objekty Session, Application a Cache 131

Objekt Request 132

Objekt Response 133

Objekt Server 137

Objekt User 139

Objekt Trace 139

Přístup ke kontextu HTTP v jiné třídě 145

Shrnutí 146

Kapitola 4 Serverové ovládací prvky 147

Typy serverových ovládacích prvků 147

Hierarchie serverového ovládacího prvku 149

Serverové ovládací prvky HTML 150

Třída HtmlControl 151

Třída HtmlContainerControl 151

Třída HtmlInputControl 152

Třídy serverových ovládacích prvků HTML 152

Nastavování atributů stylu a jiných vlastností 154

Vytváření serverových ovládacích prvků programátorsky 155

Obsluha událostí na straně serveru 157

Webové ovládací prvky 160

Základní třída WebControl 161

Základní třídy webových ovládacích prvků 162

Jednotky 165

Výčtové hodnoty 165

Barvy 166

Písma 166

Page 8: ASP.NET 4 a C# 2010, kniha 1

8

Focus 168

Výchozí tlačítko 169

Panely s rolováním 170

Obsluha událostí webových ovládacích prvků 171

Ovládací prvky pro seznamy 173

Ovládací prvky seznamů, z nichž lze vybírat 175

Ovládací prvek BulletedList 178

Ovládací prvky pro validaci vstupů 179

Validační ovládací prvky 180

Validační proces 181

Třída BaseValidator 182

Ovládací prvek RequiredFieldValidator 184

Ovládací prvek RangeValidator 184

Ovládací prvek CompareValidator 185

Ovládací prvek RegularExpressionValidator 185

Ovládací prvek CustomValidator 188

Ovládací prvek ValidationSummary 190

Programátorské využívání validátorů 191

Validační skupiny 192

Bohatě vybavené ovládací prvky ASP.NET 194

Ovládací prvek AdRotator 195

Ovládací prvek Calendar 197

Shrnutí 199

Kapitola 5 Aplikace ASP.NET 201

Anatomie aplikace ASP.NET 201

Aplikační doména 202

Doba života aplikace 203

Aktualizace aplikací 204

Struktura adresáře aplikace 204

Aplikační soubor global.asax 205

Aplikační události 207

Ukázka aplikačních událostí 209

Konfi gurace ASP.NET 210

Soubor machine.confi g 210

Soubor web.confi g 213

Nastavení <system.web> 217

Page 9: ASP.NET 4 a C# 2010, kniha 1

9

<system.webServer> 218

<appSettings> 218

<connectionStrings> 220

Programátorské čtení a zápis konfi guračních nastavení 221

Nástroj WAT (Website Administration Tool) 223

Rozšiřování struktury konfi guračního souboru 225

Šifrování konfi guračních sekcí 229

Komponenty .NET 230

Vytvoření komponenty 231

Test komponenty prostřednictvím adresáře App_Code 233

Test komponenty prostřednictvím adresáře Bin 234

Rozšiřování kanálu HTTP 236

Obslužné rutiny HTTP 236

Vytvoření vlastní obslužné rutiny HTTP 238

Konfi gurace vlastní obslužné rutiny HTTP 239

Obslužné rutiny HTTP bez konfi gurování 240

Vytvoření pokročilejší obslužné rutiny HTTP 241

Vytvoření obslužné rutiny HTTP pro obsah, který není HTML 243

HTTP Moduly 246

Vytvoření vlastního modulu HTTP 248

Shrnutí 250

Kapitola 6 Správa stavu 251

Správa stavu ASP.NET 252

Stav zobrazení 254

Ukázka práce se stavem zobrazení 255

Ukládání objektů do stavu zobrazení 257

Posouzení stavu zobrazení 259

Selektivní vypínání stavu zobrazení 260

Bezpečnost stavu zobrazení 262

Přenášení informací mezi stránkami 263

Dotazovací řetězec 264

Odesílání stránky na server přes jinou stránku 266

Cookies 273

Stav relace 274

Architektura relace 274

Práce se stavem relace 276

Page 10: ASP.NET 4 a C# 2010, kniha 1

10

Konfi gurování stavu relace 277

Zabezpečení stavu relace 284

Stav aplikace 285

Statické proměnné aplikace 287

Shrnutí 289

Část II – Přístup k datům 291

Kapitola 7 Základy ADO.NET 293

Architektura ADO.NET 294

Zprostředkovatelé dat ADO.NET 294

Standardizace v ADO.NET 296

Základní třídy ADO.NET 297

Třídy připojení 298

Připojovací řetězce 298

Testování připojení 301

Fond připojení 303

Třídy příkazů a čtenářů dat 305

Základní informace o třídách příkazů 305

Třídy čtenářů dat 306

Metoda ExecuteReader() a čtenář dat 307

Metoda ExecuteScalar() 313

Metoda ExecuteNonQuery() 314

Útoky injektáží SQL 314

Práce s parametrizovanými příkazy 317

Volání uložených procedur 319

Transakce 321

Transakce a aplikace ASP.NET 322

Úrovně izolace 327

Záchytné body 329

Kód nedogmatický vzhledem ke zprostředkovatelům 330

Vytvoření továrny na objekty 330

Vytváření objektů v továrně 332

Dotaz s kódem nedogmatickým vůči zprostředkovatelům 332

Shrnutí 334

Page 11: ASP.NET 4 a C# 2010, kniha 1

11

Kapitola 8 Datové komponenty a sada dat 335

Budování komponenty pro přístup k datům 335

Datová třída 337

Uložené procedury 338

Třída přístupu k datům (databázové utility) 339

Testování databázové komponenty 346

Odpojená data 349

Webové aplikace a sada dat 350

Integrace XML 351

Sada dat 351

Datové adaptéry 352

Plnění sady dat 354

Práce s více tabulkami najednou a relace 355

Vyhledávání konkrétních řádků 358

Použití sady dat ve vlastní třídě pro přístup k datům 359

Vázání dat 360

Datový pohled 361

Řazení s datovým pohledem 361

Filtrování s datovým pohledem 363

Pokročilé fi ltrování s relacemi 365

Vypočítané sloupce 366

Shrnutí 368

Kapitola 9 Vázání dat 369

Základy vázání dat 370

Jednoduché vázání dat 370

Další typy vázacích výrazů 373

Složené vázání dat 377

Ovládací prvky pro zdroje dat 385

Životní cyklus stránky s vázáním dat 385

Ovládací prvek SqlDataSource 386

Výběr záznamů 387

Parametrizované příkazy 390

Zpracování chyb 395

Aktualizace záznamů 396

Page 12: ASP.NET 4 a C# 2010, kniha 1

12

Odstraňování záznamů 400

Vkládání záznamů 401

Nevýhody ovládacího prvku SqlDataSource 401

Ovládací prvek ObjectDataSource 402

Výběr záznamů 403

Aktualizace záznamů 408

Aktualizace pomocí datového objektu 409

Limity ovládacích prvků pro zdroje dat 413

Specifi kace problému 413

Přidání dalších položek do seznamu 414

Zpracování dodatečných voleb s SqlDataSource 415

Zpracování dodatečných voleb s ObjectDataSource 416

Shrnutí 416

Kapitola 10 Bohatě vybavené datové ovládací prvky 417

Ovládací prvek GridView 418

Defi nice sloupců 418

Formátování GridView 422

Formátování sloupců vázaných na data 422

Styly 424

Formátování pouze některých hodnot 428

Výběr řádků v GridView 430

Výběr ve formuláři typu hlavní záznam-sdružené záznamy 431

Událost SelectedIndexChanged 433

Datový sloupec v podobě výběrových tlačítek 434

Řazení a GridView 435

Řazení s SqlDataSource 435

Řazení s ObjectDataSource 436

Řazení a výběr 438

Složitější řazení 438

Stránkování a GridView 440

Automatické stránkování 440

Stránkování a výběr 442

Vlastní stránkování s ObjectDataSource 442

Přizpůsobení pruhu se stránkovacími ovládacími prvky 445

Šablony a GridView 446

Použití několika šablon 449

Page 13: ASP.NET 4 a C# 2010, kniha 1

13

Editace šablon ve Visual Studiu 449

Vázání k metodě 450

Obsluha událostí v šabloně 451

Editace se šablonou 453

Klientská ID v šablonách 459

Ovládací prvek ListView 460

Skupiny v ListView 463

Stránkování 465

Ovládací prvky DetailsView a FormView 466

Ovládací prvek DetailsView 466

FormView 469

Pokročilé mřížky 471

Souhrny v GridView 471

Zobrazení rodič/potomek v jediné tabulce 473

Editace pole pomocí vyhledávací tabulky 475

Získávání obrázků z databáze 478

Detekce konfl iktů při souběžném zpracování 484

Shrnutí 489

Kapitola 11 Cachování a asynchronní stránky 491

Cachování v ASP.NET 492

Cachování výstupu 492

Deklarativní cachování výstupu 493

Cachování a dotazovací řetězec 494

Cachování s konkrétními parametry dotazovacího řetězce 495

Vlastní technika cachování 496

Cachování s třídou HttpCachePolicy 497

Cachování fragmentu a nahrazení po uložení do cache 498

Profi ly cache 501

Konfi gurace cache 502

Rozšiřitelnost cachování výstupu 502

Cachování dat 508

Přidávání prvků do kolekce Cache 508

Jednoduchý test cache 511

Priority cache 512

Cachování s ovládacími prvky zdrojů dat 513

Závislosti cache 516

Page 14: ASP.NET 4 a C# 2010, kniha 1

14

Závislosti na souboru a na prvku cache 517

Souhrnné závislosti 518

Zpětné volání při odstranění prvku z cache 519

Notifi kace SQL do cache 521

Jak pracují notifi kace 522

Zapnutí notifi kací 523

Vytvoření závislosti cache 524

Vlastní závislosti cache 525

Jednoduchá ukázka vlastní závislosti cache 525

Vlastní závislost cache používající fronty zpráv 526

Asynchronní stránky 529

Vytvoření asynchronní stránky 530

Dotazy na data v asynchronní stránce 532

Zpracování chyb 534

Cachování v asynchronních úlohách 537

Vícenásobné asynchronní úlohy a časové limity 540

Shrnutí 541

Kapitola 12 Soubory a proudy 543

Práce se systémem souborů 543

Třídy Directory a File 544

Třídy DirectoryInfo a FileInfo 547

Třída DriveInfo 549

Práce s atributy 550

Filtrování souborů se zástupnými symboly 552

Získávání informací o verzi souboru 553

Třída Path 554

Prohlížeč souborů 556

Čtení a zápis souborů pomocí proudů 561

Textové soubory 563

Binární soubory 565

Nahrávání souborů na server 566

Soubor zajištěný pro bezpečný simultánní přístup 568

Komprimace 573

Serializace 574

Shrnutí 577

Page 15: ASP.NET 4 a C# 2010, kniha 1

15

Kapitola 13 LINQ 579

Základy LINQ 580

Odložené vykonávání 581

Jak LINQ pracuje 582

Výrazy LINQ 583

Výrazy LINQ pod kapotou 590

LINQ to DataSet 593

Typové sady dat 596

Hodnoty Null 596

LINQ to Entities 596

Generování datového modelu 597

Třídy datového modelu 598

Relace entit 601

Dotazy na uložené procedury 602

Dotazy LINQ to Entities "pod kapotou" 604

Databázové operace 611

Vkládání 611

Aktualizace 614

Odstraňování 614

Souběžné zpracování 615

Zpracování konfl iktů při souběžném zpracování 616

Ovládací prvek EntityDataSource 621

Zobrazování dat 621

Získávání dat spojených relacemi 625

Editace dat 626

Validace 627

Ovládací prvek QueryExtender 629

Filtr SearchExpression 629

Filtr RangeExpression 631

Filtr PropertyExpression 631

Filtr MethodExpression 632

Shrnutí 633

Kapitola 14 XML 635

Kdy je rozumné používat XML? 635

Úvod do XML 636

Page 16: ASP.NET 4 a C# 2010, kniha 1

16

Přednosti XML 637

Správně strukturované XML 638

Jmenné prostory XML 639

Schémata XML 641

Zpracování XML založené na proudech 642

Zápis souborů XML 643

Čtení souborů XML 646

Zpracování XML v paměti 650

Třída XmlDocument 650

Třída XPathNavigator 654

Třída XDocument 656

Vyhledávání obsahu XML 662

Vyhledávání s XmlDocument 662

Prohledávání dokumentu XML s XPath 665

Prohledávání XDocument s LINQ 667

Validace souborů XML 669

Základní schéma 669

Validace s XmlDocument 670

Validace s XDocument 672

Transformace obsahu XML 672

Základní stylový předpis 673

Práce s XslCompiledTransform 674

Práce s ovládacím prvkem Xml 676

Transformace XML s LINQ to XML 676

Vázání dat XML 678

Vázání, které není hierarchické 679

Výrazy XPath 681

Vnořené mřížky 683

Hierarchické vázání s TreeView 685

Práce s XSLT 687

Vázání k obsahu XML z jiných zdrojů 689

Aktualizace XML prostřednictvím XmlDataSource 690

XML a sada dat ADO.NET 690

Převod sady dat do XML 691

Přístup k sadě dat jako k XML 693

Shrnutí 695

Page 17: ASP.NET 4 a C# 2010, kniha 1

17

Číst III – Budování webů ASP.NET 697

Kapitola 15 Uživatelské ovládací prvky 699

Základy uživatelského ovládacího prvku 700

Vytvoření prostého uživatelského ovládacího prvku 700

Převod stránky na uživatelský ovládací prvek 702

Přidávání kódu do uživatelského ovládacího prvku 703

Obsluha událostí 703

Přidávání vlastností 704

Práce s vlastními objekty 706

Přidávání událostí 709

Vystavení vnitřku webového ovládacího prvku 713

Dynamicky načítané uživatelské ovládací prvky 714

Frameworky portálů 715

Ukládání částí stránky do cache 718

Vlastnost VaryByControl 719

Sdílení ovládacích prvků ukládaných do cache 721

Shrnutí 721

Kapitola 16 Motivy a vzory stránek 723

Kaskádové stylové předpisy (CSS) 723

Vytvoření stylového předpisu 724

Aplikování stylových pravidel 726

Motivy 729

Složky motivu a skinové předpisy 730

Aplikování jednoduchého motivu 731

Zpracování konfl iktů souvisejících s motivem 732

Vytvoření více skinů pro jeden ovládací prvek 733

Skiny se šablonami a obrázky 734

Aplikování stylového předpisu v motivu 737

Aplikování motivů prostřednictvím konfi guračního souboru 737

Aplikování motivů dynamicky 738

Standardizace layoutu webu 740

Základní informace o vzoru stránek 741

Jednoduchý vzor stránek 742

Jednoduchá obsahová stránka 744

Page 18: ASP.NET 4 a C# 2010, kniha 1

18

Výchozí obsah 746

Vzory stránek a layout s tabulkami nebo s CSS 746

Vzory stránek a relativní cesty 749

Aplikování vzorů stránek prostřednictvím konfi guračního souboru 750

Pokročilé vzory stránek 751

Interakce s třídou vzoru stránek 751

Dynamické nastavení vzoru stránek 752

Vnořování vzorů stránek 753

Shrnutí 755

Kapitola 17 Navigace po webu 757

Stránky s více zobrazeními 758

Ovládací prvek MultiView 759

Ovládací prvek Wizard 763

Mapa webu 772

Defi nice mapy webu 772

Vázání k mapě webu 774

Navigační cesta 776

Zobrazení části mapy webu 778

Objekty mapy webu 782

Přidávání vlastních informací do mapy webu 783

Tvorba vlastního zprostředkovatele mapy webu 784

Personalizované mapy webu 791

Mapování a směrování URL 793

Mapování URL 793

Směrování URL 794

Ovládací prvek TreeView 796

Objekty TreeNode 797

Plnění uzlů na požádání 799

Styly TreeView 801

Ovládací prvek Menu 805

Styly pro ovládací prvek Menu 808

Šablony ovládacího prvku Menu 810

Shrnutí 812

Page 19: ASP.NET 4 a C# 2010, kniha 1

19

Kapitola 18 Nasazování webů 813

Instalace a konfi gurace IIS 813

Instalace IIS 7 814

Správa IIS 7 815

Jak na nasazení webu 817

Nasazení kopírováním souborů 818

Nasazení s nástrojem Web Deployment 822

Nasazení přes FTP 832

Správa webu 838

Vytvoření nového webu 838

Vytváření virtuálních adresářů 839

Třída VirtualPathProvider 840

Fondy aplikací 844

Zahřívací kolo pro aplikace 847

Rozšíření integrovaného kanálu 848

Vytvoření obslužné rutiny 848

Nasazení obslužné rutiny 849

Konfi gurace obslužné rutiny 849

Otestování obslužné rutiny 851

Shrnutí 851

Rejstřík 853

Page 20: ASP.NET 4 a C# 2010, kniha 1

20

MARIO SZPUSZTA pracuje jako architekt ve skupině Developer and Platform Group společnosti Microsoft v Rakousku a pomáhá softwarovým architektům nej-větších podniků a webovým zákazníkům se zaváděním nových technologií Micro-softu. Několik let se specializoval na vývoj bezpečného softwaru, webové služby a na integraci klientů a serverů Microsoft Office do zákaznických aplikací.

Mario pravidelně přednáší na místních a mezinárodních konferencích, jako např. DevDays a TechEd Europe Developers. V posledních dvou letech byl držitelem tech-nického obsahu TechEd Europe Developers.

O autorechMATTHEW MACDONALD je autor, pedagog a Microsoft MVP. Přispívá do ča-sopisů o programování a je autorem více než tuctu knih o programování .NET, na-příklad Pro Silverlight 3 in C# (Apress, 2009), Pro WPF in C# 2010 (Apress, 2010) a Beginning ASP.NET 4 in C# 2010 (Apress, 2010). V šerém dávnověku svého života studoval anglickou literaturu a teoretickou fyziku.

V současnosti žije v Torontu se svou ženou a dcerou.

ADAM FREEMAN je zkušený odborník v oblasti IT, který zastával vedoucí pozice v mnoha společnostech, naposledy jako CTO (chief technology officer) a COO (chi-ef operating officer) v jisté bankovní společnosti s celosvětovou působností.

Napsal několik knih o Javě a technologii .NET

O odborných korektorechFabio Claudio Ferracchiati je plodný spisovatel se zaměřením na technologie. Fabio spolupracoval na více než tuctu knih o .NET, C#, Visual Basicu a ASP.NET. Je držitelem MCSD (Microsoft Certified Solution Deve-loper) pro .NET a žije v Římě. Jeho blog naleznete na adrese http://www.ferracchiati.com.

Todd Meister pracuje s technologiemi Microsoftu více než deset let. Jako technický redaktor se podílel na vy-dání více než padesáti knih tématicky sahajících od SQL Serveru až k .NET Frameworku. Se svou manželkou Kimberly a čtyřmi fantastickými dětmi žije v centrální Indianě.

Page 21: ASP.NET 4 a C# 2010, kniha 1

21

ÚvodKdyž se poprvé objevilo .NET, byla to malá lavina nových technologií. Najednou tu byl zcela nový způsob, jak psát webové aplikace (ASP.NET), zcela nový způsob, jak se připojovat k databázím (ADO.NET), nové, typově bezpečné jazyky (C# a VB .NET) a spravovaný runtime (CLR). Významnou novou technologií byly také for-muláře Windows (Windows Forms), knihovna tříd pro budování aplikací Windows.

Jak již bezpochyby víte, ASP.NET je nová generace technologií Microsoftu pro vytváření webových aplikací běžících na straně serveru. Je postavena na Microsoft .NET Frameworku, který je seskupením úzce souvi-sejících nových technologií, které přináší kompletní revoluci: od přístupu do databáze až po distribuované aplikace. ASP.NET je jednou z nejdůležitějších komponent .NET Frameworku – jedná se totiž o část, která vám umožní vyvíjet velmi výkonné webové aplikace.

ASP.NET nemá problémy se získáním zájmu programátorů. Bez nadsázky můžeme říci, že ASP.NET je nej-kompletnější platformou pro vývoj webu, která kdy byla sestavena. Převyšuje svého předchůdce ASP, kte-ré bylo navrženo jako "quick-and-dirty" sada nástrojů pro vkládání dynamického obsahu na běžné webové stránky. Oproti němu je ASP.NET plnohodnotnou platformou pro vývoj komplexních a velmi rychlých we-bových aplikací.

V této knize se naučíte všechno, co potřebujete ke zvládnutí ASP.NET 4. Pokud jste již programovali v před-chozí verzi ASP.NET, můžete se zaměřit výhradně na nové funkce, mezi něž patří ASP.NET MVC (kapitola 32), ASP.NET Dynamic Data (kapitola 33) a Silverlight (kapitola 34). Všechny tyto kapitoly naleznete ve dru-hém dílu této knihy. Pokud jste nikdy v ASP.NET neprogramovali, zjistíte, že tato kniha poskytuje vhodné tempo výuky, při níž projdete všechny základní věci, které potřebujete znát. Rovněž se podíváte na to, co se děje na pozadí a jak ASP.NET interně funguje. Jediným požadavkem pro zvládnutí problematiky této knihy je obstojná znalost jazyka C# a základů .NET. Pokud patříte k vývojářům migrujícím z jazyka Java nebo C++, takže C# je pro vás novinkou, možná bude lepší začít s nějakou knihou, která se věnuje základům .NET, nap-příklad s knihou Pro C# 2010 and .NET 4 Platform od Andrewa Troelsena (Apress, 2010).

Rozdělení knihyVydavatelství Zoner Press v uplynulých letech vydalo několik knih popisujících problematiku ASP.NET a C#, například ASP.NET 3.5 a C# 2008 – tvorba dynamických stránek profesionálně, která vyšla v roce 2008, nebo ASP.NET 2.0 a C# – tvorba dynamických stránek profesionálně z roku 2006. Protože se ale jednalo o knihy, které se snažily pokud možno co nejvíce obsáhnout problematiku ASP.NET a C#, nepříznivě se to projevilo na velkém počtu stran těchto knih – který se blížil k číslu 1 600 – což znesnadňovalo jejich každodenní použí-vání ve vývojářské praxi. Další vydání, tentokrát s názvem ASP.NET 4 a C# 2010 – tvorba dynamických stránek profesionálně proto bylo z praktických důvodů rozděleno do dvou samostatných knih (dílů). V knize 1, kterou právě držíte v ruce, se věnujeme základům ASP.NET, přístupu k datům a budování webů ASP.NET. Kniha 2 se pak věnuje pokročilejším záležitostem, jako je bezpečnost, pokročilé uživatelské rozhraní a nové technologie zahrnuté do ASP.NET (jako je ASP.NET MVC, Silverlight a ASP.NET Dynamic Data).

Kniha 1 obsahuje tato témata:

• Část I – Základy ASP.NET. V kapitole 1 začneme stručným pohledem na celou platformu ASP.NET, .NET Framework a uvedeme si přehled změn, k nimž došlo v ASP.NET 4. V kapitole 2 se pustíte do zvládání svých "nezbytných prostředků k obživě" – zde jmenovitě Visual Studia 2010. V kapitolách 3, 4, 5 a 6 zvládnete klíčové části infrastruktury ASP.NET, například model webové stránky, konfigura-ci aplikace a správu stavu. Jakmile ovládnete tyto základy, podíváme se na to, jak ASP.NET zpracovává

Page 22: ASP.NET 4 a C# 2010, kniha 1

22

požadavky a spravuje dobu života webových aplikací. Rovněž se dozvíte, jak rozšířit architekturu ASP.NET.

• Část II – Přístup k datům. V této části se budeme věnovat oblasti nezbytné pro vývoj veškerého soft-waru, což je přístup a manipulace s daty. V kapitolách 7 a 8 si popíšeme základy ADO.NET a naučíme se navrhovat komponenty pro přístup k datům. V kapitolách 9 a 10 naleznete informace o sadě inova-tivních ovládacích prvků pro vázání dat ASP.NET. Tyto prvky vám umožní naformátovat a zobrazovat data bez nutnosti psát vlastní kód. Kapitola 11 vás zavede k pokročilým strategiím ukládání do cache, což je funkcionalita, která zajišťuje vysoký výkon. Kapitoly 12, 13 a 14 vás přenesou mimo svět ADO.NET, protože si ukážeme, jak pracovat se soubory, s technologií LINQ a obsahem XML.

• Část III – Budování webů ASP.NET. Třetí a poslední část knihy 1 se věnuje základních technikách a funkcionalitách určeným pro správu skupin webových stránek. V kapitole 15 začnete pracovat s uživatelskými ovládacími prvky, které vám umožní opětovně používat části uživatelského rozhraní. V kapitole 16 probereme motivy (které slouží pro automatickou stylizaci ovládacích prvků) a vzory stránek (které jsou určeny pro opětovné použití vaší designové šablony na více webových stránkách). V kapitole 17 si ukážeme, jakým způsobem používat navigační model ASP.NET, aby návštěvníci mohli přecházet z jedné stránky vašeho webu na jinou. V kapitole 18 si pak podrobně popíšeme nasazování aplikací a software webového serveru IIS.

Kniha 2 obsahuje tato témata:

• Část IV – Bezpečnost. Kniha 2 bezprostředně navazuje na knihu 1. Začíná čtvrtou částí, kde se po-díváte na bohatou sadu funkcionalit vztahujících se k zabezpečení ASP.NET. V kapitole 19 začneme s celkovým přehledem principů zabezpečení. Poté se společně podíváme na ověřování založené na for-mulářích (kapitola 20) a funkcionalitu členství, která s ní spolupracuje (kapitola 21). V kapitole 22 se budeme věnovat ověřování systému Windows a v kapitole 23 se naučíte, jak omezit ověřené uživate-le prostřednictvím autorizačních pravidel a jakým způsobem používat zabezpečení na základě rolí. V kapitole 24 prozkoumáte funkcionalitu profilů – což je předem zhotovené řešení určené k ukládání informací specifických pro uživatele. S využitím informací z kapitoly 25 se naučíte šifrováním chránit nejenom data, která ukládáte do databáze, ale také informace, které zasíláte prostřednictvím URL ad-resy. V kapitole 26 vám poté ukážeme, jakým způsobem se můžete zapojit do bezpečnostního modelu ASP.NET vytvořením vlastního zprostředkovatele členství.

• Část V – Pokročilé uživatelské rozhraní. V této části si předvedeme, jakým způsobem lze rozšířit vaše webové stránky o různě pokročilé techniky. V kapitole 27 se podíváme na vlastní ovládací prvky. V kapitole 28 odbočíme k problematice GDI+ a ručně vytvářené grafiky. V kapitolách 29 a 30 bude-me rozvažovat o tom, jak technikami JavaScriptu a Ajaxu učinit webové stránky dynamičtější (tím, že do nich včleníme takové efekty jako automatické dokončování textu a přetahování myší) a vstřícnější (tím, že budou reagovat na události na straně klienta a plynule aktualizovat webovou stránku). Nako-nec v kapitole 31 detailně prozkoumáme funkcionalitu Web Parts ASP.NET, která vám jednoduchým způsobem umožní vytvářet webové portály.

• Část VI – Nové směry. V této části se budeme zamýšlet nad několika nejvíce vzrušujícími inovacemi v moderním webovém vývoji. V kapitole 32 prozkoumáme ASP.NET MVC, což je nová alternativa ke klasickému modelu webových formulářů, která dává vývojářům kompletní kontrolu nad realizací HTML a nad strukturou URL. V kapitole 33 budete zvažovat ASP.NET Dynamic Data, což je perfektní řešení pro rychlé budování takových aplikací, které se točí okolo prohlížení a editování informací ulo-žených v nějaké databázi. V poslední kapitole této knihy proniknete do kouzelného světa Silverlightu, což je plug-in Microsoftu do prohlížeče, který vám umožňuje rozšířit běžné webové stránky o bohatou grafiku, animace, zvuk a samozřejmě i video pro širokou paletu prohlížečů a operačních systémů.

Page 23: ASP.NET 4 a C# 2010, kniha 1

23

Komu je tato kniha určena?Kniha je zamýšlena jako prvotní zdroj informací pro profesionální vývojáře, kteří mají slušné znalosti o webo-vém vývoji na straně serveru. Kniha neposkytuje vyčerpávající pohled na každou ingredienci nacházející se uvnitř .NET Frameworku – taková kniha by musela mít více než dvojnásobný počet stran. Proto se tato kniha raději zaměřuje na to, aby poskytla inteligentní úvod do ASP.NET pro profesionální programátory, kteří se nepotřebují zdržovat se základy. Průběžně se budete soustřeďovat na různá zákoutí .NET Frameworku, která potřebujete znát, abyste mohli budovat profesionální webové aplikace, mezi něž patří přístup k datům a XML. S těmito schopnostmi budete schopni vytvářet weby nové generace, a to s nejlepšími nástroji, jaké jsou dnes k dispozici.

Kniha je také velmi praktická. Nebudete se učit jen funkce ASP.NET, budete se také učit techniky ze sku-tečného světa, s jejichž pomocí budete moci převést svůj web na vyšší kvalitativní úroveň. Pozdější kapitoly knihy jsou zasvěcené břitkým tématům, jako jsou vlastní ovládací prvky, dynamická tvorba grafiky, pokročilá bezpečnost či vysoký výkon při přístupu k datům. Tohle všechno je potřebné pro vývoj profesionálních we-bových aplikací.

Abyste mohli z této knihy vytěžit co nejvíce, měli byste se dobře vyznat v syntaxi jazyka C# a v pojmech ob-jektově orientovaného programování. Nemusíte mít zkušenosti s předchozí verzí ASP.NET, protože veškeré potřebné věci se v této knize probírají. Pokud jste zkušenými programátory v jazycích Java nebo C++ bez jakýchkoliv zkušeností s .NET, měli byste raději začít s nějakou knihou, která se věnuje základům .NET, na-příklad "Pro C# 2010 and .NET 4 Platform" od Andrewa Troelsena (Apress, 2010).

Co potřebujete, abyste mohli pracovat s touto knihou? Chcete-li vyvíjet a testovat webové aplikace ASP.NET, potřebujete Visual Studio 2010. Přestože teoreticky se dá kód vytvářet ručně, je to nesmírně pracné, a to ani nemluvíme o vysoké pravděpodobnosti vzniku různých chyb. Tento ruční přístup se nikdy nepoužívá v profesionálních kruzích.

Pokud také plánujete hostovat weby ASP.NET, musíte používat nějakou serverovou verzi Windows, např. Windows Server 2003 nebo Windows Server 2008. Rovněž si musíte nainstalovat IIS (Internet Information Services), což je software pro hostování webů. Webový server IIS, který se podrobněji popisuje v kapitole 18, je součástí operačního systému Windows.

Do této knihy je také začleněno několik příkladů, které využívají ukázkové databáze dodávané společně s SQL Serverem, aby bylo možné demonstrovat funkčnost kódu pro přístup k datům, techniky týkající se bezpeč-nosti a jiné funkce. Pro vyzkoušení těchto příkladů můžete používat libovolnou verzi SQL serveru, včetně SQL Server Express, která je součástí některých verzí Visual Studia (a volně ke stažení na stránkách http://msdn.microsoft.com/express/database). Pokud budete používat nějaké jiné relační databáze, pravdě-podobně se neobejdete bez drobných úprav kódu uvedeného v této knize.

Sdělte nám svůj názorJako čtenáři této knihy se stáváte těmi nejdůležitějšími kritiky a komentátory. Vážíme si vašeho názoru a chtě-li bychom vědět, co děláme správně, co bychom mohli dělat lépe, ve kterých oblastech bychom měli publiko-vat, a také bychom chtěli znát vaše další podnětné myšlenky, o které jste ochotni se s námi podělit.

Jako odborný redaktor Zoner Press vítám vaše názory. Můžete mi psát – poslat e-mail nebo dopis – a sdělit mi, co se vám v této knize lí bilo nebo nelíbilo, stejně tak, co bychom měli udělat, aby naše další knihy byly lepší. Pokud mi napíšete, nezapomeňte prosím připojit název knihy, ISBN, jméno autora, vaše jméno, telefon,

Page 24: ASP.NET 4 a C# 2010, kniha 1

24

nebo e-mail. Pozorně zhodnotím vaše názory a poskytnu je autorovi a ostatním redaktorům, kteří pracovali na této knize. Prosím, vězte, že nemohu pomoci s technickými problémy, které se týkají obsahu knihy, a že díky velkému množství e-mailů, které dostávám, nemohu zaručit odpověď na každou zprávu.

E-mail: [email protected] nebo [email protected].

Adresa: ZonerPress, ZONER software, a.s, Miroslav Kučera, Nové sady 18, 602 00 Brno.

Zdrojové kódyZdrojové soubory k této knize je možné stáhnout na této adrese (velikost 14 MB):

http://zonerpress.cz/download/aspnet4-a-c2010.zip

Dále jsou k dispozici ke stažení dvě bonusové kapitoly (velikost 1.4 MB):

http://www.zonerpress.cz/download/bonusove-kapitoly-aspnet.zip

Bonusové kapitolyK této knize jsou k dispozici dvě bonusové kapitoly ve formátu PDF. V těchto kapitolách naleznete obsah, který kvůli technologickým omezením tisku nemohl být zařazen do této knihy. Jedná se o obsah, který není považován za důležitý z hlediska vývoje webu ASP.NET.

POZNÁMKA Tyto bonusové kapitoly pocházejí z předchozích vydání této knihy. Informace z bonusových kapi-tol se ale vztahují i k ASP.NET 4, protože v něm se tyto funkce nezměnily.

Podívejte se, co v nich najdete:

• Bonusová kapitola 1 (Zdroje a lokalizace). V této kapitole se popisuje, jak používat prostředky a lo-kalizace na webech vytvořených s ASP.NET. Jedná se o základní kapitolu pro vývojáře, kteří po třebují vytvořit webové stránky, které mají být k dispozici ve více jazykových variantách.

• Bonusová kapitola 2 (Podpora návrhového režimu). V této kapitole se popisuje, jak můžete do svých vlastních ovládacích prvků přidat podporu návrhového režimu, aby se v prostředí Visual Studia přívě-tivě chovaly, samy zařizovaly serializaci svých vlastností a podporovaly pokročilé návrhářské funkce, jako jsou inteligentní značky.

Page 25: ASP.NET 4 a C# 2010, kniha 1

43

KAPITOLA 2

Visual Studio

S ASP.NET máte na výběr několik možností, jak vyvíjet webové aplikace. Máte-li neo-dolatelnou potřebu (a na množství práce nehledíte), můžete psát kód pro každou we-bovou stránku a třídu ručně v nějakém obyčejném textovém editoru. Ačkoliv takový přístup je až dojemně bezelstný, je dosti pracný a náchylný k chybám, pokud vytváříte cokoliv jiného než nějakou jednoduchou webovou stránku. Profesionální vývojáři ASP.NET se touto cestou vydávají jen výjimečně.

Téměř všechny rozsáhlejší weby ASP.NET se budují pomocí Visual Studia. Je to pro-fesionální vývojářský nástroj, který podporuje komplexní soustavu různých designér-ských nástrojů, včetně legendární sady nástrojů pro ladění, a také IntelliSense, jež při psaní kódu zachytává chyby a nabízí různá doporučení. Visual Studio také podporuje robustní model kódu v pozadí (code-behind), kdy se kód .NET, který píšete, odděluje od značek webové stránky. A aby bylo možné celé toto dílo korunovat, má Visual Stu-dio zabudovaný vlastní webový server, který je určený pro testování, takže vytvořené weby je možné ladit snadno a bez různých zmatků.

V  této kapitole podnikneme projížďku po  integrovaném vývojovém rozhraní (IDE) Visual Studia a ukážeme si dva způsoby, jak ve Visual Studiu vytvořit webovou aplikaci ASP.NET – buď jako základní web bez podpůrných souborů, nebo jako webový pro-jekt. Dále se také seznámíme s modelem kódu, který se používá pro webové stránky ASP.NET, a s procesem kompilace, který se používá ve webových aplikacích ASP.NET. Nakonec se zběžně podíváte na  Web Development Helper, což je ladicí nástroj založe-ný na prohlížeči, který můžete využívat v součinnosti s Visual Studiem.

CO JE NOVÉHO?

Přestože se Visual Studio 2010 drží stejného základního modelu jako dřívější verze, pro-dělalo významný facelifting. A skutečně – Visual Studio 2010 bylo od základu přepsáno pomocí WPF (technologie Microsoftu pro uživatelská rozhraní založená na .NET), jehož výsledkem je čistší, modernější rozhraní. Většina změn spočívá v detailech, jako méně pře-plácaná obrazovka a přímočařejší IntelliSense (viz sekci "Vylepšení Visual Studia 2010"). Ovšem vývojáři pracující s WPF nebo se Silverlightem (kapitola 34) konečně dostávají dlouho očekávaného návrháře, který umožňuje budovat uživatelská rozhraní tak, že pře-tahují a pouštějí ovládací prvky z Toolboxu (stejně jako v nějaké stránce ASP.NET).

Page 26: ASP.NET 4 a C# 2010, kniha 1

Kapitola 2 – Visual Studio44

Úvod do Visual StudiaPsát a kompilovat kód ručně bývá těžkopádné a pracné. Proto IDE Visual Studia nabízí spoustu vysokoú-rovňových funkcí, které zdaleka přesahují základní úroveň správy kódu. Mezi přednosti Visual Studia patří:

• Integrovaný webový server. Abyste mohli hostovat nějakou webovou aplikaci ASP.NET, potřebujete webový server, jako je například IIS, který čeká na webové požadavky a obsluhuje odpovídající strán-ky. Příprava webového serveru je nicméně nepohodlná. Ovšem díky tomu, že je do Visual Studia in-tegrován vývojový webový server, můžete spouštět weby přímo z prostředí vývojářského nástroje. Je to také lepší z hlediska bezpečnosti, protože víte, že žádný externí počítač nemůže spustit váš aktuálně testovaný web. Testovací server totiž akceptuje jen připojení z místního počítače.

• Vývoj ve více jazycích. Visual Studio umožňuje psát kód v jednom nebo několika různých jazycích a přitom používat stále stejné rozhraní (IDE). Visual Studio také umožňuje vytvářet jednotlivé webové stránky v různých jazycích a zařadit je všechny do téže webové aplikace. Existují jen dvě následující omezení: v jedné webové stránce si musíte vystačit s jediným programovacím jazykem (protože jinak by vznikly očividné potíže s kompilací takového kódu) a musíte použít bezprojektový model webu (tj. ne webový projekt).

• Píšete méně kódu. U většiny aplikací je potřeba vytvořit dost velké množství "vaty" v podobě kódu standardní povahy. Webové stránky ASP.NET nejsou v tomto ohledu žádnou výjimkou. Pokud napří-klad přidáte nějaký webový ovládací prvek, připojíte obsluhu událostí a přizpůsobíte formátování, je také potřeba nastavit řadu věcí v kódu stránky. Visual Studio ovšem automaticky nastaví tyto nezbytné podrobnosti za vás.

• Intuitivní styl psaní kódu. Visual Studio standardně formátuje kód už v okamžiku, kdy jej vytváříte, automaticky jej odsazuje a používá různé barvy pro odlišení různých částí kódu, jako jsou třeba ko-mentáře. Tyto zdánlivé drobnosti mají za následek, že je kód mnohem lépe čitelný a méně náchylný k chybám. Můžete si dokonce nakonfigurovat, jaké automatické formátování má Visual Studio použí-vat, což je skvělé, pokud například preferujete jiný styl psaní složených závorek (jakým je například styl K&R, při kterém se otevírací složená závorka vkládá na řádek předchozí deklarace).

TIP Chcete-li se podívat, jaké formátovací volby máte k dispozici, zvolte Tools -> Options a přesvědčte se, že je zaškrtnuto políčko Show All Settings. Pak vyhledejte skupinu formátovacích nastavení Text Editor -> C#. Měli byste vidět několik voleb, které řídí způsob umisťování složených závorek.

• Rychlejší vývoj. Mnohé ze schopností Visual Studia jsou zaměřeny tak, abyste dokázali udělat svou práci ještě rychleji. Funkce týkající se pohodlí umožňují vývojářům pracovat rychle a efektivně. Patří mezi ně IntelliSense (označuje chyby a doporučuje opravy), výkonné vyhledávání a nahrazování (do-káže vylovit klíčová slova nejen z jednoho souboru, ale i z celého projektu) či automatické převádění kódu na komentáře (takže snadno skryjete blok kódu) a zpět.

• Ladění. Nástroje Visual Studia určené pro ladění jsou tím nejlepším způsobem, jak vystopovat mys-teriózní chyby a diagnostikovat podivné chování. Svůj kód můžete vykonávat řádek po řádku, nasta-vovat inteligentní body přerušení (breakpoints), které si navíc můžete uschovat pro pozdější využití. Můžete si také prohlížet informace nacházející se v paměti počítače.

Page 27: ASP.NET 4 a C# 2010, kniha 1

ASP.NET 4 a C# 2010 – tvorba dynamických stránek profesionálně 45

Visual Studio oplývá celou řadou dalších funkcí, které se v  této kapitole vůbec nezmiňují – patří mezi ně například řízení projektů, integrované řízení zdrojového kódu, funkce pro refaktoraci kódu nebo bohatě vy-bavený model rozšiřitelnosti. Pokud navíc pracujete s  Visual Studio Team Foundation Server 2010, získáte pokročilejší možnosti pro unit testy, týmovou spolupráci nebo pro podporu řízení verzí (je daleko mocnější než běžné jednodušší nástroje, jako je Visual SourceSafe). O Visual Studiu Team Foundation Server 2010 v této kapitole nehovoříme – další informace najdete na http://msdn.microsoft.com/teamsystem.

Weby a webové projektyPro některé vývojáře může být trochu matoucí, že Visual Studio nabízí dva způsoby jak vytvořit webovou aplikaci, která je řízena technologií ASP.NET:

• Vývoj založený na projektu. Když vytvoříte webový projekt, Visual Studio vygeneruje soubor pro-jektu .csproj (za předpokladu, že kódujete v C#), kam zaznamená soubory, které máte v projektu, a kam také uloží několik nastavení pro potřeby ladění. Když pak spustíte webový projekt, Visual Studio zkompiluje veškerý váš kód do jediné assembly ještě předtím, než spustí webový prohlížeč.

• Vývoj bez projektu. Alternativním přístupem je vytvořit prostý web bez projektového souboru. V ta-kovém případě Visual Studio předpokládá, že každý soubor, který je v adresáři webu (a v jeho poda-dresářích), je součástí vaší webové aplikace. V tomto scénáři Visual Studio nepotřebuje předběžně kompilovat váš kód. ASP.NET zkompiluje váš web až tehdy, když poprvé požádáte o nějakou stránku. (Samozřejmě můžete použít tzv. předběžnou kompilaci, abyste u nasazené aplikace odstranili nadměr-nou zátěž při prvním požadavku. Jak se to udělá, se vysvětluje v kapitole 18.)

První verze .NET Visual Studia používala model s projektem. Visual Studio 2005 odstranilo model s projek-tem a upřednostnilo vývoj bez projektu. Proti tomu však protestovala malá, ale významná skupina vývojářů. Když u Microsoftu zjistili, že skutečně existují specifické scénáře, v nichž se pracuje lépe, když se vyvíjejí s projektem, vydali doplněk, který se dal zdarma stáhnout a který do Visual Studia 2005 vrátil funkce pro vývoj s projektem. Ve Visual Studiu 2010 jsou podporovány obě alternativy.

V této kapitole začnete vytvořením standardního webu bez projektu, protože je to jednodušší a přímočařejší přístup. Později se v této kapitole seznámíte se scénáři, které pracují lépe, když se vyvíjejí s projektem, a nau-číte se vytvářet webové projekty.

Vytvoření webu bez projektuProtože se určitě ihned chcete pustit do konkrétní práce, zvolte File > New > Website. Visual Studio zobrazí dialog New Web Site (viz obrázek 2-1). Chcete-li vytvořit nový web, musíte nejprve zvolit vývojový jazyk (nalevo), verzi .NET (nahoře uprostřed), šablonu webu (uprostřed) a umístění (dole). Jakmile specifikujete všechny tyto podrobnosti, klikněte na tlačítko OK. Vytvoří se váš web.

V příštích sekcích tyto podrobnosti trochu rozvineme.

Page 28: ASP.NET 4 a C# 2010, kniha 1

Kapitola 2 – Visual Studio46

1. Zvolte jazyk 2. Zvolte verzi .NET 3. Zvolte šablonu webu

4. Zvolte umístění

Obrázek 2-1. Okno New Web Site.

SKRYTÝ SOUBOR ŘEŠENÍ

Přestože vývoj bez projektu ulehčuje život, ze zákulisí pořád vykukují poslední pozůstatky systému Visual Studia, který byl založen na řešeních.

Když vytvoříte webovou aplikaci, Visual Studio ve skutečnosti vytvoří soubory řešení (.sln a .suo) v nějakém adresáři specifickém pro uživatele, jako například c:\Users\[JménoUživatele]\Documents\Visual Studio 2010\Projects\[NázevSložkyWebu]. Soubory řešení poskytují několik funkcí specifických pro Vi-sual Studio, které se přímo nevztahují k ASP.NET, jako jsou třeba nastavení týkající se ladění. Když například přidáte do kódu nějaké webové stránky bod přerušení (breakpoint) (bude to probráno později v sekci "Ladění ve Visual Studiu"), Visual Studio uloží tento bod přerušení do souboru .suo, takže bude k dispozici, až projekt otevřete ně-kdy později. Obdobným způsobem Visual Studio sleduje aktuálně otevřené soubory, takže až se někdy později vrátíte do projektu, může vám zobrazit naposledy otevřené soubory. Tento přístup ke správě řešení je ale chou-lostivý – přesunete-li projekt z jednoho umístění na jiné, o všechny tyto informace přijdete. Protože však nejsou až tak důležité (dívejte se na ně jako na několik konkrétních nastavení projektu), jejich ztráta není žádnou tragédií. Všeobecné výhody tohoto systému bez projektů za tenhle kompromis stojí.

Chcete-li trvalejší řešení, uložte soubory řešení explicitně do umístění, které sami zvolíte. Klikněte prostě v Prů-zkumníkovi řešení (Solution Explorer, reprezentuje vaše řešení) na horní položku. Pokud například otevřete složku s názvem MyWebSite, bude se horní položka jmenovat Solution 'MyWebSite'. Pak zvolte File -> Save [NázevŘešení] As. Tato technika se hodí, jestliže jste vytvořili řešení, v němž kombinujete několik aplikací (například nějaký web vytvořený bez projektu plus komponentu typu knihovna tříd) a chcete je editovat a ladit souběžně.

Page 29: ASP.NET 4 a C# 2010, kniha 1

ASP.NET 4 a C# 2010 – tvorba dynamických stránek profesionálně 47

Vývojový jazykTímto jazykem identifikujete programovací jazyk .NET, v němž budete psát kód svého webu. Jazyk, který zvolíte, bude výchozím jazykem projektu. To znamená, že explicitně můžete přidat webové stránky Visual Basicu do webu napsaného v C# a naopak.

Verze .NET FrameworkuStarší verze Visual Studia byly těsně svázané s konkrétními verzemi .NET. S Visual Studiem .NET jste vytváře-li aplikace .NET 1.0, s Visual Studiem .NET 2003 aplikace .NET 1.1 a s Visual Studiem 2005 aplikace .NET 2.0.

Visual Studio 2008 toto omezení odstranilo tím, že bylo zacíleno na více verzí, a Visual Studio 2010 v tomto trendu pokračuje. Umožňuje vytvářet webové aplikace, které jsou navrženy tak, že se mohou provozovat s .NET 2.0, .NET 3.0, .NET 3.5 nebo .NET 4.0. Obvykle vybíráte nejnovější verzi, kterou podporuje váš webo-vý server. Novější verze poskytují přístup k novějším funkcím a všechny příklady, které byly zařazeny do této knihy, jsou zacíleny na .NET 4.

POZNÁMKA Nic vám samozřejmě nebrání, chcete-li si nainstalovat na webový server několik verzí .NET a na-konfigurovat několik virtuálních adresářů tak, aby používaly různé verze ASP.NET (popisuje se to v kapitole 18).

Aby se Visual Studio mohlo přesně zacílit na danou verzi, obsahuje pro každou verzi .NET tzv. referenční assembly (reference assemblies). Tyto assembly obsahují metadata všech typů, ale žádný kód požadovaný k  jejich implementaci. To znamená, že Visual Studio 2010 může použít referenční assembly k  tomu, aby přizpůsobilo na míru Intellisense a kontroly chyb tak, že nebudete moci používat ovládací prvky, třídy nebo členy, které nejsou dostupné v té verzi .NET, na kterou jste zacíleni. Pomocí těchto metadat také určuje, které ovládací prvky se mají objevit v Toolboxu, které členy se mají objevit v oknech Properties a Object Browser atd., aby zajistilo, že celé vývojové prostředí bude omezeno na verzi, kterou jste si zvolili.

Verzi .NET, na kterou se chcete zacílit, můžete změnit i poté, co jste vytvořili web. Postupujte takto: 1. Zvolte Website > Start Options. 2. V seznamu nalevo zvolte kategorii Build. 3. V seznamu Target Framework zvolte verzi .NET, na kterou se chcete zacílit.

POZNÁMKA Ve webovém projektu je postup trochu jiný. V něm začnete tím, že v Průzkumníku řešení dvojitě kliknete na uzel Properties. Pak zvolte záložku Application, která obsahuje seznam Target Framework, v němž vyberete verzi .NET, na kterou se chcete zacílit.

Když změníte verzi .NET, Visual Studio poměrně značně upraví soubor web.config. Například soubor web.config pro aplikaci .NET 4 je stručný a přehledný, protože všechny potřebné podpůrné konstrukce jsou už připraveny v kořenovém souboru web.config počítače. Soubor web.config pro aplikaci .NET 3.5 ovšem zahrnuje pěknou porci "vaty", aby se explicitně zapnula podpora pro funkce Ajaxu a C# 3.5. Do obsahu souboru web.config se hlouběji zanoříte v kapitole 5.

Page 30: ASP.NET 4 a C# 2010, kniha 1

Kapitola 2 – Visual Studio48

ŠablonaJakmile zvolíte jazyk (v  seznamu nalevo), uvidíte seznam všech šablon, které Visual Studio poskytuje pro tento jazyk (ve velkém poli uprostřed). Šablona určuje, jaké soubory bude mít web na počátku.

Visual Studio podporuje několik typů aplikací ASP.NET, ale všechny se kompilují a vykonávají stejně. Jediný rozdíl je v tom, jaké soubory Visual Studio standardně vytvoří na začátku. Pokud například vytvoříte WCF Service, Visual Studio vygeneruje web, který bude mít v  sobě jen jedinou službu WCF (nikoliv webovou stránku ASP.NET).

Následuje přehled dostupných šablon:

• ASP.NET Web Site. Vytvoří plnohodnotný web ASP.NET, v němž už bude základní infrastruktura. Web bude obsahovat vzor stránek (master page), kde bude nadefinováno úhrnné rozvržení (se záhla-vím, zápatím a pruhem nabídek), a rovnou použitelné stránky default.aspx a about.aspx. Web také bude obsahovat složku Accounts se stránkami pro registraci, pro přihlášení a pro změnu hesla a složku Scripts s knihovnou jQuery pro JavaScript na straně klienta.

• ASP.NET Empty Web Site. Vytvoří téměř prázdný web. Bude obsahovat pouze očesaný konfigurační soubor web.config a nic jiného. Sem snadno doplníte další věci, jen co začnete kódovat.

TIP Jestliže je ASP.NET pro vás poměrně nové, začněte s volbou ASP.NET Empty Web Site. Až si přečtete ostatní kapitoly této knihy a naučíte se používat takové funkce, jako jsou vzory stránek a členství, budete lépe připraveni na to, abyste mohli skočit po hlavě do trochu spletitější šablony ASP.NET Web Site, pokud bude vyhovovat vašim potřebám.

• ASP.NET Dynamic Data Entities Web Site. Vytvoří web ASP.NET, který používá funkci ASP.NET s názvem Dynamic Data, popisovanou v kapitole 33. Web je navržen tak, aby přistupoval k podklado-vé databázi pomocí modelu entit (Entity Model), zatímco podobně pojmenovaná šablona ASP.NET Dynamic Data LINQ to SQL Web Site používá starší přístup s LINQ to SQL.

• WCF Service. Vytvoří službu WCF – knihovnu metod na straně serveru, které mohou volat vzdálení klienti (například aplikace Windows). Přestože v této knize model WCF podrobně neprobíráme, v ka-pitole 34 společně vytvoříme služby WCF pro poskytnutí funkcionality na straně serveru pro stránky Silverlightu.

• ASP.NET Reports Web Site. Vytvoří web ASP.NET, který používá ovládací prvek ReportView a ná-stroj SQL Server Reporting Services (pro generování databázových reportů, které se mohou prohlížet a spravovat přes web). Obdobnou službu poskytuje i šablona ASP.NET s názvem Crystal Reports Web Site, používá však konkurenční software Crystal Reports.

Přestože většina vývojářů preferuje zahájit práce s šablonami ASP.NET Empty Web Site, nebo ASP.NET Web Site a hned začít kódovat, existují specializovanější šablony pro specifické typy webových aplikací. Chcete-li si je prohlédnout, klikněte v dialogu New Web Site zcela vlevo na záhlaví Online Templates. Bude chvilku trvat, než Visual Studio zkontaktuje webové servery Microsoftu. Jakmile se tak stane, přidá seznam podkategorií ša-blon, v každé z nich bude skupina hotových šablon. Vývojáři ASP.NET si například mohou stáhnout šablonu, chtějí-li vytvořit nějaký web DotNetNuke (který používá populární framework portálu DotNet Nuke), nebo nějaký web ASP.NET MVC, který k autentizaci uživatelů používá OpenID.

Page 31: ASP.NET 4 a C# 2010, kniha 1

335

KAPITOLA 8

Datové komponenty a sada dat

V předchozí kapitole jste se poprvé podívali na ADO.NET a prozkoumali přístup k da-tům založený na připojení. Nyní nastal čas, abyste svůj kód pro přístup k datům vložili do aplikace s dobrým návrhem.

V  řádně zorganizované aplikaci se kód pro přístup k  datům nikdy nevkládá přímo do stránek (do jejich souborů kódu v pozadí). Vkládá se do  databázové komponenty určené k tomuto účelu. V této kapitole uvidíte, jak se vytvoří jednoduchá vlastní třída pro přístup k datům a jak se do ní přidávají oddělené metody pro jednotlivé činnosti, které potřebujete s daty dělat. Nejlepší na  tom ale bude, že svou databázovou kom-ponentu budete moci využívat všeobecně, protože nebude omezena jen na  scénáře, v nichž se pracuje s kódem. V příští kapitole pak uvidíte, jak se vaše databázová kom-ponenta zapojí do infrastruktury ASP.NET pro vázání dat.

V této kapitole se budeme také zabývat odpojenými daty – tedy funkcemi ADO.NET, které se soustřeďují okolo pojmu sada dat (DataSet) a jež umožňují komunikovat s daty ještě dlouho poté, co jste ukončili připojení ke zdroji dat. Ve stránkách ASP.NET není povinné pracovat s objekty sady dat (DataSet). Nicméně vám poskytují mnohem větší flexibilitu při pohybu po datech, jejich filtrování a řazení – což jsou témata, která se probírají v této kapitole.

Budování komponenty pro přístup k datůmV profesionálních aplikacích se databázový kód nevkládá přímo u klienta, ale zapouz-dřuje se do třídy, která je vyhrazena pro tyto záležitosti. Pokud chce klient provést něja-kou databázovou operaci, stačí vytvořit instanci této třídy a zavolat patřičnou metodu.

Až budete vytvářet databázovou komponentu, měli byste dodržovat základní zásady uvedené v tomto oddílu. Tím zajistíte, že databázová komponenta bude dobře zapouz-dřená a optimalizovaná, že se bude moci (pokud to bude potřeba) vykonávat v oddě-leném procesu, a že dokonce se bude moci použít i v konfiguraci složené z několika webových serverů, jejímž účelem je vyrovnávat zatížení.

• Otevírejte a uzavírejte připojení rychle. Otevřete databázové připojení při každém volání metody a uzavřete je ještě předtím, než metoda skončí. Připojení

Page 32: ASP.NET 4 a C# 2010, kniha 1

Kapitola 8 – Datové komponenty a sada dat336

by se nikdy nemělo ponechat otevřené mezi jednotlivými klientskými požadavky, přičemž klient by neměl mít žádnou kontrolu nad tím, jak se připojení získávají, nebo kdy se uvolňují. Pokud by klient měl tyto pravomoci, docházelo by k situacím, kdy se některé připojení neukončí tak rychle, jak je to možné, nebo že bude ponecháno omylem dlouho otevřené, což snižuje škálovatelnost systému.

• Implementujte zpracování chyb. Pomocí zpracování chyb zajistěte, aby se připojení uzavírala i tehdy, když příkaz SQL vygeneruje nějakou výjimku. Uvědomte si, že počet možných připojení je omezený, a pokud je používáte zbytečně (byť jenom na několik sekund), může to mít opravdu značný dopad na celkový výkon.

• Při návrhu aplikace dodržujte bezstavové praktiky. Všechny informace, které potřebuje nějaká metoda, předávejte v parametrech dané metody. Všechna získaná data pak vracejte prostřednictvím návratových hodnot. Vytvoříte-li třídu, která si bude udržovat nějaký stav, nemůžete ji snadno imple-mentovat jako webovou službu nebo použít ve scénáři, kdy se vybalancovává zatížení. A dále: pokud je databázová komponenta hostována vně procesu, každé volání metody vytváří znatelnou zátěž. Také nezapomínejte, že pokud se vlastnosti nastavují opakovaným voláním metod, bude to trvat mnohem déle, než když se vyvolá jediná metoda se všemi těmito informacemi v podobě parametrů.

• Klienti by neměli vydávat dotazy s příliš širokým záběrem. Každý dotaz by měl uvážlivě vybírat pouze ty sloupce, které jsou zapotřebí. Také byste měli vždy, když je to možné, omezovat výsledky po-mocí klauzule WHERE. Pokud například získáváte záznamy objednávek, pravděpodobně půjde do do-tazu vložit nějaké rozpětí od-do (nebo nějakou klauzuli SQL, jakou je třeba TOP 1000). Bez těchto bezpečnostních opatření může vaše aplikace z počátku pracovat uspokojivě, nicméně se bude postup-ně zpomalovat, jak databáze bude postupně narůstat a klienti budou provádět stále rozsáhlejší dotazy, které budou zatěžovat databázi i síť.

V dobré, přímočaře navržené databázové komponentě se používá separátní třída pro každou databázovou tabulku (nebo pro logicky provázanou skupinu tabulek). Všechny obvyklé činnosti při práci s databází, jako je vložení, odstranění nebo modifikace záznamu, se zabalují do oddělených bezstavových metod. A koneč-ně – v každém volání databáze se používá nějaká uložená procedura, která je určena pro daný účel. Pečlivě vrstvený návrh ukazuje obrázek 8-1.

Obrázek 8-1. Vrstvený návrh s databázovou třídou.

Jednoduchou databázovou komponentu předvádí následující příklad. Databázový kód se v  něm nevkládá přímo do webové stránky, ale používá mnohem lepší návrhářský postup, protože odděluje kód do samostatné třídy, kterou lze používat na mnoha stránkách. Tato třída se dá (pokud je to potřeba) zkompilovat jako část oddělené komponenty. A kromě toho, připojovací řetězec se získává ze sekce <connectionStrings> sou-boru web.config, nepíše se explicitně do kódu.

Databázová komponenta se ve  skutečnosti skládá ze dvou tříd – ze třídy datového balíčku (data package class), která obaluje informace jediného záznamu (a jež je známa jako datová třída, data class), a ze třídy data-

Page 33: ASP.NET 4 a C# 2010, kniha 1

ASP.NET 4 a C# 2010 – tvorba dynamických stránek profesionálně 337

bázových utilit, která provádí skutečné databázové operace pomocí kódu ADO.NET (a jež je známa jako třída přístupu k datům, data access class). V této kapitole se na komponentu, která obsahuje tyto dvě ingredience, odkazujeme jako na databázovou komponentu. V příštích oddílech se detailně seznámíte s velmi jednodu-chou databázovou komponentou, která pracuje s jedinou tabulkou.

POZNÁMKA Databázová komponenta ale nemusí nutně své akce vykonávat pomocí tříd ADO.NET. Například byste neměli přehlédnout možnosti LINQ to Entities (budeme je probírat v kapitole 13) a část prací zajistit prostřednic-tvím této technologie. Je ovšem žádoucí, abyste pro svou databázovou logiku vždy vytvořili separátní, bezstavovou komponentu, a to na základě zásad, které jsou popisovány v této kapitole.

Datová třídaAby se do  databáze Northwind mohly informace snadněji vkládat i z ní vytahovat ven, bude rozumné, když vytvoříme třídu EmployeeDetails s údaji o zaměstnanci, která bude poskytovat všechny databázové sloup-ce jako veřejné vlastnosti. Kompletní kód této třídy vidíte zde:

public class EmployeeDetails

{

private int employeeID;

public int EmployeeID

{

get {return employeeID;}

set {employeeID = value;}

}

private string firstName;

public string FirstName

{

get {return firstName;}

set {firstName = value;}

}

private string lastName;

public string LastName

{

get {return lastName;}

set {lastName = value;}

}

private string titleOfCourtesy;

public string TitleOfCourtesy

{

get {return titleOfCourtesy;}

set {titleOfCourtesy = value;}

}

Page 34: ASP.NET 4 a C# 2010, kniha 1

Kapitola 8 – Datové komponenty a sada dat338

public EmployeeDetails(int employeeID, string firstName, string lastName,

string titleOfCourtesy)

{

EmployeeID = employeeID;

FirstName = firstName;

LastName = lastName;

TitleOfCourtesy = titleOfCourtesy;

}

}

Připomínáme, že do této třídy nejsou zařazeny všechny informace, které se nacházejí v tabulce Employees, protože chceme udržet náš příklad co nejstručnější.

Když budujete datovou třídu, můžete se rozhodnout, že použijete automatické vlastnosti, což je funkcionalita jazyka C#, která vám umožňuje vytvořit obal vlastnosti a podkladovou privátní proměnnou prostřednictvím jediné konstrukce kódu, jak je to uvedeno zde:

public int EmployeeID

{ get; set; }

Používáte-li automatické vlastnosti, vygeneruje se privátní proměnná automaticky v  době kompilace, což znamená, že neznáte její název. V kódu musíte k této privátní proměnné vždy přistupovat prostřednictvím procedur vlastnosti. Kompilátor C# dále přidává kód, který získává a nastavuje privátní proměnnou pomocí stejné cesty, již byste použili, pokud byste tento kód napsali sami.

Automatické proměnné sice vypadají podobně jako veřejné členské proměnné, ale důsledky používání au-tomatických proměnných jsou diametrálně odlišné. Protože jsou automatické proměnné opravdové, plno-hodnotné vlastnosti, můžete je později nahradit explicitní vlastností (potřebujete-li například přidat nějaký validační kód), aniž byste museli měnit veřejné rozhraní datové třídy nebo zasahovat do jiných tříd, které vy-užívají datovou třídu. A obdobně – automatické vlastnosti mají veškerá metadata explicitních vlastností, takže v klíčových programovacích scénářích pracují jako vlastnosti. Na rozdíl od veřejných členských proměnných automatické vlastnosti podporují například techniky pro vázání dat (viz kapitolu 9).

Uložené proceduryNež můžete začít programovat logiku přístupu k datům, musíte už mít připravenou sadu uložených procedur, jimiž se budou informace získávat, vkládat a aktualizovat. Následující databázový skript vytváří pět uložených procedur, které jsou k tomu zapotřebí:

CREATE PROCEDURE InsertEmployee

@EmployeeID int OUTPUT,

@FirstName varchar(10),

@LastName varchar(20),

@TitleOfCourtesy varchar(25)

AS

INSERT INTO Employees

(TitleOfCourtesy, LastName, FirstName, HireDate)

VALUES (@TitleOfCourtesy, @LastName, @FirstName, GETDATE());

SET @EmployeeID = @@IDENTITY

Page 35: ASP.NET 4 a C# 2010, kniha 1

ASP.NET 4 a C# 2010 – tvorba dynamických stránek profesionálně 339

GO

CREATE PROCEDURE DeleteEmployee

@EmployeeID int

AS

DELETE FROM Employees WHERE EmployeeID = @EmployeeID

GO

CREATE PROCEDURE UpdateEmployee

@EmployeeID int,

@TitleOfCourtesy varchar(25),

@LastName varchar(20),

@FirstName varchar(10)

AS

UPDATE Employees

SET TitleOfCourtesy = @TitleOfCourtesy,

LastName = @LastName,

FirstName = @FirstName

WHERE EmployeeID = @EmployeeID

GO

CREATE PROCEDURE GetAllEmployees

AS

SELECT EmployeeID, FirstName, LastName, TitleOfCourtesy FROM Employees

GO

CREATE PROCEDURE CountEmployees

AS

SELECT COUNT(EmployeeID) FROM Employees

GO

CREATE PROCEDURE GetEmployee

@EmployeeID int

AS

SELECT EmployeeID, FirstName, LastName, TitleOfCourtesy FROM Employees

WHERE EmployeeID = @EmployeeID

GO

Třída přístupu k datům ( databázové utility)Ještě potřebujete třídu databázových utilit, která bude provádět skutečné databázové operace. Tato třída bude využívat uložené procedury vypsané v předchozím oddílu. V našem příkladu jsme třídě databázových utilit přidělili název EmployeeDB. Zapouzdřuje veškerý kód pro přístup k  datům a  podrobnosti specifické pro danou databázi. Podívejte se na její osnovu:

Page 36: ASP.NET 4 a C# 2010, kniha 1

Kapitola 8 – Datové komponenty a sada dat340

public class EmployeeDB

{

private string connectionString;

public EmployeeDB()

{

// Získá výchozí připojovací řetězec.

connectionString = WebConfigurationManager.ConnectionStrings[

"Northwind"].ConnectionString;

}

public EmployeeDB(string connectionString)

{

// Nastaví specifikovaný připojovací řetězec.

this.connectionString = connectionString;

}

public int InsertEmployee(EmployeeDetails emp)

{ ... }

public void DeleteEmployee(int employeeID)

{ ... }

public void UpdateEmployee(EmployeeDetails emp)

{ ... }

public EmployeeDetails GetEmployee()

{ ... }

public List<EmployeeDetails> GetEmployees()

{ ... }

public int CountEmployees()

{ ... }

}

POZNÁMKA Možná jste si všimli, že třída EmployeeDB používá metody instance, nikoliv statické metody. Je to kvůli tomu, že i když třída EmployeeDB neukládá žádný stav pocházející z databáze, ukládá připojovací řetězec jako privátní členskou proměnnou. Protože se jedná o instanční třídu, připojovací řetězec je možné získat pokaždé, když se ze třídy vytvoří objekt (instance), přičemž se to nemusí dělat pokaždé, když se volá nějaká metoda. Při tomto přístupu je kód trochu přehlednější a bude o něco rychlejší (nebudeme muset tolikrát číst ze souboru web.config). Celkový zisk z toho všeho je ovšem dosti malý, takže klidně můžete v databázových komponentách používat statické metody.

Ve všech metodách se používá stejný pečlivý přístup, kdy se výlučně spoléháme na uloženou proceduru, která bude jako jediná komunikovat s databází. Podívejte se na následující kód pro vložení záznamu. Předpokládá se v něm, že jste importovali jmenný prostor System.Data.SqlClient:

public int InsertEmployee(EmployeeDetails emp)

{

SqlConnection con = new SqlConnection(connectionString);

Page 37: ASP.NET 4 a C# 2010, kniha 1

ASP.NET 4 a C# 2010 – tvorba dynamických stránek profesionálně 341

SqlCommand cmd = new SqlCommand("InsertEmployee", con);

cmd.CommandType = CommandType.StoredProcedure;

cmd.Parameters.Add(new SqlParameter("@FirstName", SqlDbType.NVarChar, 10));

cmd.Parameters["@FirstName"].Value = emp.FirstName;

cmd.Parameters.Add(new SqlParameter("@LastName", SqlDbType.NVarChar, 20));

cmd.Parameters["@LastName"].Value = emp.LastName;

cmd.Parameters.Add(new SqlParameter("@TitleOfCourtesy",SqlDbType.NVarChar, 25));

cmd.Parameters["@TitleOfCourtesy"].Value = emp.TitleOfCourtesy;

cmd.Parameters.Add(new SqlParameter("@EmployeeID", SqlDbType.Int, 4));

cmd.Parameters["@EmployeeID"].Direction = ParameterDirection.Output;

try

{

con.Open();

cmd.ExecuteNonQuery();

return (int)cmd.Parameters["@EmployeeID"].Value;

}

catch (SqlException err)

{

// Nahradí informace o chybě něčím méně konkrétním.

// Zde také můžete chybu někam zaprotokolovat.

throw new ApplicationException("Data error.");

}

finally

{

con.Close();

}

}

Jak sami vidíte, metoda přijímá data v podobě datového objektu EmployeeDetails. Jakékoliv chyby budou zachyceny, takže citlivé interní podrobnosti o chybě nebudou vráceny do kódu webové stránky. Tím se zabra-ňuje tomu, aby webová stránka poskytovala takové informace, které by se daly případně zneužít jako exploity při útocích. Zde je také ideální místo pro volání vhodné metody z nějaké protokolovací komponenty, která by uložila kompletní podrobnosti o vzniklé chybě do  protokolu událostí nebo do nějaké jiné databáze.

Metody GetEmployee() a GetEmployees() vracejí data pomocí jediného objektu EmployeeDetails, re-spektive pomocí seznamu objektů EmployeeDetails:

public EmployeeDetails GetEmployee(int employeeID)

{

SqlConnection con = new SqlConnection(connectionString);

SqlCommand cmd = new SqlCommand("GetEmployee", con);

cmd.CommandType = CommandType.StoredProcedure;

cmd.Parameters.Add(new SqlParameter("@EmployeeID", SqlDbType.Int, 4));

cmd.Parameters["@EmployeeID"].Value = employeeID;

try

Page 38: ASP.NET 4 a C# 2010, kniha 1

Kapitola 8 – Datové komponenty a sada dat342

{

con.Open();

SqlDataReader reader = cmd.ExecuteReader(CommandBehavior.SingleRow);

// Zkontroluje, zda dotaz vrátil nějaký záznam.

if (!reader.HasRows) return null;

// Získá první řádek.

reader.Read();

EmployeeDetails emp = new EmployeeDetails(

(int)reader["EmployeeID"], (string)reader["FirstName"],

(string)reader["LastName"], (string)reader["TitleOfCourtesy"]);

reader.Close();

return emp;

}

catch (SqlException err)

{

throw new ApplicationException("Data error.");

}

finally

{

con.Close();

}

}

public List<EmployeeDetails> GetEmployees()

{

SqlConnection con = new SqlConnection(connectionString);

SqlCommand cmd = new SqlCommand("GetAllEmployees", con);

cmd.CommandType = CommandType.StoredProcedure;

// Vytvoří kolekci pro záznamy zaměstnanců.

List<EmployeeDetails> employees = new List<EmployeeDetails>();

try

{

con.Open();

SqlDataReader reader = cmd.ExecuteReader();

while (reader.Read())

{

EmployeeDetails emp = new EmployeeDetails(

(int)reader["EmployeeID"], (string)reader["FirstName"],

(string)reader["LastName"], (string)reader["TitleOfCourtesy"]);

employees.Add(emp);

}

reader.Close();

return employees;

Page 39: ASP.NET 4 a C# 2010, kniha 1

ASP.NET 4 a C# 2010 – tvorba dynamických stránek profesionálně 343

}

catch (SqlException err)

{

throw new ApplicationException("Data error.");

}

finally

{

con.Close();

}

}

Metoda UpdateEmployee() hraje speciální roli. Určuje strategii simultánního zpracování databázové kom-ponenty (viz pozdější oddíl "Strategie simultánního zpracování").

Tady je její kód:

public void UpdateEmployee(int EmployeeID, string firstName, string lastName,

string titleOfCourtesy)

{

SqlConnection con = new SqlConnection(connectionString);

SqlCommand cmd = new SqlCommand("UpdateEmployee", con);

cmd.CommandType = CommandType.StoredProcedure;

cmd.Parameters.Add(new SqlParameter("@FirstName", SqlDbType.NVarChar, 10));

cmd.Parameters["@FirstName"].Value = firstName;

cmd.Parameters.Add(new SqlParameter("@LastName", SqlDbType.NVarChar, 20));

cmd.Parameters["@LastName"].Value = lastName;

cmd.Parameters.Add(new SqlParameter("@TitleOfCourtesy", SqlDbType.NVarChar,25));

cmd.Parameters["@TitleOfCourtesy"].Value = titleOfCourtesy;

cmd.Parameters.Add(new SqlParameter("@EmployeeID", SqlDbType.Int, 4));

cmd.Parameters["@EmployeeID"].Value = EmployeeID;

try

{

con.Open();

cmd.ExecuteNonQuery();

}

catch (SqlException err)

{

throw new ApplicationException("Data error.");

}

finally

{

con.Close();

}

}

Page 40: ASP.NET 4 a C# 2010, kniha 1

Kapitola 8 – Datové komponenty a sada dat344

Posledními dvěma ingrediencemi jsou metody DeleteEmployee() a CountEmployees():

public void DeleteEmployee(int employeeID)

{

SqlConnection con = new SqlConnection(connectionString);

SqlCommand cmd = new SqlCommand("DeleteEmployee", con);

cmd.CommandType = CommandType.StoredProcedure;

cmd.Parameters.Add(new SqlParameter("@EmployeeID", SqlDbType.Int, 4));

cmd.Parameters["@EmployeeID"].Value = employeeID;

try

{

con.Open();

cmd.ExecuteNonQuery();

}

catch (SqlException err)

{

throw new ApplicationException("Data error.");

}

finally

{

con.Close();

}

}

public int CountEmployees()

{

SqlConnection con = new SqlConnection(connectionString);

SqlCommand cmd = new SqlCommand("CountEmployees", con);

cmd.CommandType = CommandType.StoredProcedure;

try

{

con.Open();

return (int)cmd.ExecuteScalar();

}

catch (SqlException err)

{

throw new ApplicationException("Data error.");

}

finally

{

con.Close();

}

}

Page 41: ASP.NET 4 a C# 2010, kniha 1

543

KAPITOLA 12

Soubory a proudy

Většina webových aplikací se spoléhá především na databáze, když mají ukládat infor-mace. Databáze jsou nepřekonatelné ve víceuživatelských situacích. Zpracovávají bez jakýchkoliv potíží simultánní scénáře, přičemž podporují cachování a  nízkoúrovňo-vé optimalizace disku, což zaručuje vynikající výkon. Stručně a jasně řečeno: RDBMS (Relational Database Management System) nabízí nejrobustnější a nejvýkonnější úlo-žiště dat.

Samozřejmě, většina vývojářů nevyhnutelně tu a  tam čelí scénářům, kdy je potřeba přistupovat k datům z jiných umístění, například ze systému souborů. Jako běžně se vyskytující situaci můžeme uvést čtení informací, které vyprodukovala jiná aplikace, či rychlý zápis informací do rychle spíchnutého protokolu pro potřeby testování nebo vy-tvoření administrační stránky, která by administrátorům umožnila nahrávat soubory na server a prohlížet, co je momentálně na serveru umístěno. V této kapitole se dozvíte, jak se pracuje s třídami jmenného prostoru System.IO, chcete-li získávat informace o souborech, pracovat s cestami souborů jako s řetězci, zapisovat do souborů a číst je nebo serializovat objekty.

Práce se systémem souborůNa nejjednodušší úrovni se při přístupu k souborům získávají informace o tom, jaké existují soubory a adresáře, co v nich je, a provádějí se typické systémové operace se soubory (jako je kopírování souborů a  vytváření adresářů). Při těchto úlohách neotví-ráte soubory, a ani do nich nezapisujete (tyto činnosti probereme v kapitole později).

.NET Framework poskytuje pro získávání informací o  systému souborů několik zá-kladních tříd. Všechny jsou umístěny ve jmenném prostoru System.IO a není náho-dou, že tyto třídy se používají vždy stejným způsobem, ať už se jedná o webové aplikace nebo desktopové aplikace. Patří sem tyto třídy:

• Directory a File. Poskytují statické metody pro získávání informací o soubo-rech a adresářích, které jsou viditelné z vašeho serveru.

• DriveInfo, DirectoryInfo a FileInfo. Tyto třídy používají podobné instanční metody a vlastnosti pro získávání stejných informací.

Page 42: ASP.NET 4 a C# 2010, kniha 1

Kapitola 12 – Soubory a proudy544

Obě sady tříd poskytují obdobné metody a vlastnosti. Klíčovým rozdílem je to, že než můžete zavolat nějakou metodu z té druhé skupiny, musíte nejprve vytvořit objekt typu DirectoryInfo nebo FileInfo, zatímco statické metody tříd Directory a File jsou dostupné stále. Typicky jsou třídy Directory a File pohodl-nější pro jednorázové úlohy. Oproti tomu, pokud potřebujete získávat několik druhů informací, je lepší, když si vytvoříte objekty typu DirectoryInfo nebo FileInfo. Pak se nebudete muset zdržovat uváděním názvu adresáře nebo souboru při každém volání metody. Také je to rychlejší, protože třídy DirectoryInfo a File-Info provádějí vlastní testy bezpečnosti pouze jednou – když vytvoříte instanci objektu. Třídy Directory a File provádějí bezpečnostní kontroly při každém volání metody.

Třídy Directory a FileTřídy Directory a File poskytují řadu užitečných metod. Jejich přehled předkládají tabulky 12-1 a 12-2. Připomínáme, že každá metoda přebírá stejný parametr: plně kvalifikovanou cestu identifikující adresář či soubor, nad kterým chcete vykonat danou operaci.

Tabulka 12-1. Metody třídy Directory.

Metoda Popis

CreateDirectory() Vytvoří nový adresář. Specifikujete-li nějaký adresář uvnitř jiného neexistujícího adresáře, ASP.NET důvtipně vytvoří všechny požadované adresáře.

Delete() Odstraní odpovídající prázdný adresář. Chcete-li odstranit adresář spolu s jeho obsahem (podadresáři a soubory), přidejte nepovinný druhý parametr true.

Exists() Vrací true nebo false, čímž indikuje, zdali zadaný adresář existuje nebo ne.

GetCreationTime()

GetLastAccessTime()

GetLastWriteTime()

Vrací objekt typu DateTime reprezentující časový okamžik, kdy byl adresář vy-tvořen, resp. kdy se k němu naposled přistoupilo, resp. kdy se do něho naposled zapisovalo. Každá metoda začínající na "Get" má odpovídající metodu začínající na "Set", které v této tabulce uvedené nejsou.

GetDirectories()

GetFiles()

Vrací pole řetězců, jeden pro každý podadresář, resp. soubor ve specifikovaném adresáři. Do metod se dá jako druhý parametr předat vyhledávací výraz (napří-klad výraz ASP*.*).

GetLogicalDrives() Vrací pole řetězců, jeden pro každou jednotku definovanou na aktuálním počíta-či. Písmena jednotek se uvádějí ve tvaru c:\.

GetParent() Provede rozklad předaného řetězce adresáře a vrátí rodičovský adresář. Mů-žete to udělat i sami tak, že vyhledáte znak \ (nebo obecněji pomocí Path.Directory SeparatorChar), tato funkce však trochu ulehčuje život.

GetCurrentDirectory()

SetCurrentDirectory()

Umožňuje získat, resp. nastavit, aktuální adresář, což se hodí, potřebujete-li pra-covat s relativními cestami, a nikoliv s úplnými cestami. Na tyto funkce byste se však obecně spoléhat neměli – používejte raději úplné cesty.

Move() Přebírá dva parametry: zdrojovou cestu a cílovou cestu. Adresář a veškerý jeho obsah se dá přesunout na jakoukoliv cestu, pokud se nachází na stejné jednotce.

Page 43: ASP.NET 4 a C# 2010, kniha 1

ASP.NET 4 a C# 2010 – tvorba dynamických stránek profesionálně 545

Metoda Popis

GetAccessControl()

SetAccessControl()

Vrací objekt System.Security.AccessControl.DirectorySecuri-ty. Pomocí tohoto objektu můžete prozkoumávat seznamy Windows pro řízení přístupu k adresáři (ACL, Access Control List), které se aplikují na daný adresář. Je dokonce možné je měnit programátorsky.

Tabulka 12-2. Metody třídy File.

Metoda Popis

Copy() Přebírá dva parametry: plně kvalifikovaný název zdrojového souboru a plně kva-lifikovaný název cílového souboru. Chcete-li povolit přepis existujícího souboru, použijte přetíženou variantu, která přebírá třetí logický parametr (nastavte jej na true).

Delete() Odstraní specifikovaný soubor, ale nevygeneruje žádnou výjimku, když se soubor nenajde.

Exists() Vrací true, nebo false, podle toho, zdali specifikovaný soubor existuje nebo ne.

GetAttributes()

SetAttributes()

Získá, resp. nastaví, výčtovou hodnotu, která může obsahovat libovolnou kombi-naci hodnot z výčtu FileAttributes.

GetCreationTime()

GetLastAccessTime()

GetLastWriteTime()

Vrací objekt typu DateTime, který reprezentuje časový okamžik, kdy byl soubor vytvořen, resp. kdy se k němu naposled přistoupilo, resp. kdy se do něho naposled zapisovalo. Každá metoda začínající na "Get" má odpovídající metodu začínající na "Set", které v této tabulce uvedené nejsou.

Move() Přebírá dva parametry: plně kvalifikovaný název zdrojového souboru a plně kva-lifikovaný název cílového souboru. Soubor můžete přesunout i na jinou jednotku a při přesunu ho zároveň přejmenovat (nebo ho přejmenovat, aniž byste ho pře-sunuli jinam).

CreateText() Vytvoří specifikovaný soubor a vrátí objekt typu FileStream, s jehož pomocí pak můžete do souboru zapisovat. CreateText() dělá totéž, ale vrací objekt typu StreamWriter obalující proud.

Open()

OpenWrite()

OpenRead()

OpenText()

Open() otevře soubor (za předpokladu, že existuje). OpenText() a Open-Read() otevřou soubor pouze pro čtení a vracejí FileStream, resp. Stream-Reader. OpenWrite() otevře soubor pouze pro zápis a vrátí FileStream.

ReadAllText()

ReadLines()

ReadBytes()

Přečte celý soubor a vrátí jeho obsah jako jediný řetězec, nebo pole řetězců (je-den řetězec pro každý řádek), nebo jako pole bajtů. Tyto metody volejte pouze na velmi malé soubory. U větších souborů používejte proudy a čtěte je po úsecích, abyste snížili nároky na paměť.

Page 44: ASP.NET 4 a C# 2010, kniha 1

Kapitola 12 – Soubory a proudy546

Metoda Popis

WriteAllText()

WriteLines()

WriteBytes()

Zapíše celý soubor najednou pomocí dodaného řetězce, pole řetězců (jeden pro každý řádek), nebo pole bajtů. Jestliže už soubor existuje, přepíše se.

GetAccessControl()

SetAccessControl()

Vrací, resp. nastavuje, objekt System.Security.AccessControl.File-Security. Pomocí tohoto objektu můžete prozkoumávat seznamy Windows pro řízení přístupu k adresáři (ACL, Access Control List), které se aplikují na daný adresář. Je dokonce možné je měnit programátorsky.

TIP Jedinou věc, kterou třída File postrádá (a již poskytuje třída FileInfo), je možnost získat velikost zadané-ho souboru.

Metody tříd File a Directory jsou zcela intuitivní. Například – následujícím kódem si můžete dynamicky vypsat seznam názvů všech souborů v aktuálním adresáři:

string directoryName = @"c:\Temp";

// Získá seznam souborů a zobrazí ho na stránce.

string[] fileList = Directory.GetFiles(directoryName);

foreach (string file in fileList)

{

lstFiles.Items.Add(file);

}

V tomto příkladu je před řetězcem s cestou adresáře c:\Temp uveden znak zavináč (@). Tím se C# říká, aby interpretoval řetězec přesně tak, jak je napsaný. Kdyby tam zavináč nebyl, předpokládal by C#, že znak oddě-lovače pro úrovně adresářů (\) vyjadřuje začátek speciální posloupnosti znaků (tedy to, že účelem znaku je předznačit následující znak). Jinou volbou je použít přímo předznačenou posloupnost \\, kterou C# pochopí jako jediný znak obrácené lomítko. V takovém případě byste cestu zapsali ve tvaru c:\\Temp.

Protože je seznam souborů prostě seznamem obyčejných řetězců, dá se snadno svázat s nějakým ovládacím prvkem seznamu, takže dospějeme k efektivnější syntaxi pro zobrazení souborů na stránce:

string directoryName = @"c:\Temp";

lstFiles.DataSource = Directory.GetFiles(directoryName);

lstFiles.DataBind();

POZNÁMKA Aby výše uvedený kód mohl fungovat, musí mít účet, pod kterým běží zpracovatelský proces ASP.NET, přidělená patřičná oprávnění k adresáři, s nímž chcete pracovat. Jinak se při pokusu webové stránky přistoupit k systému souborů vygeneruje výjimka SecurityException. Oprávnění daného adresáře můžete upravit tak, že na něm kliknete pravým tlačítkem myši, vyberete Vlastnosti (Properties) a kliknete na záložku Zabezpečení (Security). Obvykle by to mělo probíhat hladce, pokud testujete aplikaci s integrovaným webovým serverem Visual Studia, který běží pod vaším uživatelským účtem. Snadno se ovšem můžete dostat do potíží, až svůj web nasadíte. V takovém přípa-dě bude potřeba, abyste udělili patřičná oprávnění skupině IIS_USRS (nebo modifikovat účet, který bude používat váš web). Další informace naleznete v kapitole 18.

Page 45: ASP.NET 4 a C# 2010, kniha 1

ASP.NET 4 a C# 2010 – tvorba dynamických stránek profesionálně 547

Třídy DirectoryInfo a FileInfoVe třídách DirectoryInfo a FileInfo se zrcadlí funkcionalita tříd Directory a File. Kromě toho usnad-ňují procházky po adresářích a souborech. Například můžete snadno získat objekty FileInfo souborů v ně-jakém adresáři reprezentovaném objektem DirectoryInfo.

Připomínáme, že třídy Directory a File vystavují pouze metody. Třídy DirectoryInfo a FileInfo po-skytují metody i vlastnosti. Například třída File má samostatné metody GetAttributes() a SetAttribu-tes(), kdežto třída FileInfo vystavuje vlastnost Attributes, kterou lze číst i nastavovat. Jinou příjemnou věcí tříd DirectoryInfo a FileInfo je to, že sdílejí společnou sadu vlastností a metod, protože jsou obě odvozeny ze společné základní třídy FileSystemInfo. Jejich společné členy viz tabulka 12-3.

Tabulka 12-3. Členy tříd DirectoryInfo a FileInfo.

Člen Popis

Attributes Umožňuje získat nebo nastavit atributy pomocí kombinace hodnot z výčtu File-Attributes.

CreationTime

LastAccessTime

LastWriteTime

Umožňuje získat nebo nastavit čas vytvoření, čas posledního přístupu, resp. čas poslední modifikace pomocí objektu typu DateTime.

Exists Vrací true nebo false podle toho, zdali soubor, resp. adresář, existuje. Jinak řečeno: můžete vytvářet objekty FileInfo a DirectoryInfo, jimž neodpovídá žádný sku-tečný fyzický adresář, resp. soubor. V takovém případě samozřejmě nebudete moci pou-žívat vlastnosti jako CreationTime, nebo metody jako je MoveTo().

FullName

Name

Extension

FullName vrací řetězec reprezentující plně kvalifikovaný název adresáře nebo souboru, Name název adresáře nebo souboru (s příponou), Extension samotnou příponu ná-zvu adresáře nebo souboru.

Delete() Odstraní soubor nebo adresář, pokud existuje. Odstraňujete-li adresář, musí být prázdný, nebo musíte specifikovat nepovinný parametr nastavený na true.

Refresh() Aktualizuje objekt, takže bude synchronizován se všemi změnami v systému souborů, k nimž mezitím došlo (když byl například ručně změněn nějaký atribut souboru z Prů-zkumníka Windows).

Create() Vytvoří uvedený adresář nebo soubor.

MoveTo() Zkopíruje adresář a jeho obsah, nebo soubor. U objektu DirectoryInfo specifikujete novou cestu, u objektu FileInfo cestu a název souboru.

Třídy FileInfo a DirectoryInfo mají kromě toho několik jedinečných členů, které jsou uvedeny v tabul-kách 12-4 a 12-5.

Tabulka 12-4. Jedinečné členy třídy DirectoryInfo.

Člen Popis

Parent

Root

Vracejí objekt DirectoryInfo reprezentující rodičovský, resp. kořenový adresář.

Page 46: ASP.NET 4 a C# 2010, kniha 1

Kapitola 12 – Soubory a proudy548

Člen Popis

CreateSubdirectory() Vytvoří adresář s uvedeným názvem v adresáři, který je reprezentovaném objek-tem DirectoryInfo. Vrátí také nový objekt DirectoryInfo reprezentující podadresář.

GetDirectories() Vrátí pole objektů DirectoryInfo, které reprezentují všechny adresáře obsaže-né v adresáři, pro který se metoda volá.

GetFiles() Vrátí pole objektů FileInfo, které reprezentují všechny soubory obsažené v adre-sáři, pro který se metoda volá.

Table 12-5. Jedinečné členy třídy FileInfo.

Člen Popis

Directory Vrací objekt DirectoryInfo reprezentující rodičovský adresář.

DirectoryName Vrací řetězec názvu rodičovského adresáře.

Length Vrací dlouhé celé číslo (typ long, 64bitové) vyjadřující velikost souboru v bajtech.

CopyTo() Zkopíruje soubor na novou cestu a pod novým názvem, obojí uvedete jako para-metr. Vrátí také nový objekt FileInfo reprezentující nový (resp. zkopírovaný) soubor. Můžete také specifikovat nepovinný parametr s hodnotou true, čímž po-volíte přepis.

Create()

CreateText()

Vytvoří specifikovaný soubor a vrátí objekt FileStream, s jehož pomocí pak mů-žete do souboru zapisovat. CreateText() dělá totéž, ale vrací objekt Strea-mWriter obalující proud.

Open()

OpenRead()

OpenText()

OpenWrite()

Otevře soubor (za předpokladu, že existuje). OpenRead() a OpenText() ote-vřou soubor pouze ke čtení a vrátí FileStream, resp. StreamReader. Open-Write() otevře soubor pouze pro zápis a vrátí FileStream.

Když vytváříte objekt DirectoryInfo nebo FileInfo, specifikujte v konstruktoru úplnou cestu, jak to vi-díte zde:

DirectoryInfo myDirectory = new DirectoryInfo(@"c:\Temp");

FileInfo myFile = new FileInfo(@"c:\Temp\readme.txt");

Když vytváříte nový objekt DirectoryInfo nebo FileInfo, obdržíte výjimku, pokud cesta není formálně správná (například tehdy, když obsahuje nepovolené znaky). Zadaná cesta ale nemusí odpovídat skutečnému fyzickému adresáři nebo souboru. Pokud si nejste jisti, můžete pomocí Exists zkontrolovat, zdali adresář nebo soubor opravdu existují.

Jestliže soubor nebo adresář neexistuje, můžete ho vytvořit metodou Create(). Ukázka:

// Definuje nový adresář a soubor.

DirectoryInfo myDirectory = new DirectoryInfo(@"c:\Temp\Test");

FileInfo myFile = new FileInfo(@"c:\Temp\Test\readme.txt");

Page 47: ASP.NET 4 a C# 2010, kniha 1

ASP.NET 4 a C# 2010 – tvorba dynamických stránek profesionálně 549

// Nyní je vytvoří. Na pořadí zde záleží.

// Nemůžete vytvořit soubor v adresáři, který ještě neexistuje.

myDirectory.Create();

FileStream stream = myFile.Create();

stream.Close();

Objekty FileInfo a DirectoryInfo získají informace ze systému souborů, když se jich poprvé dotážete na nějakou vlastnost. Při dalším používání už nekontrolují nové informace. To může vést k různým nekon-zistencím, jestliže se soubor mezitím změnil. Pokud víte (nebo máte podezření), že se informace o daném objektu ze systému souborů změnila, zavolejte metodu Refresh(), abyste získali nejčerstvější informace.

Třída DirectoryInfo neposkytuje žádnou vlastnost, s níž by se dala zjistit celková velikost adresáře. Můžete ovšem velmi snadno spočítat celkovou velikost všech souborů v konkrétním adresáři. Jednoduše sečtěte jed-notlivé hodnoty FileInfo.Length.

Než se do toho pustíte, rozmyslete si, zdali chcete do celkového součtu zahrnout také podadresáře. Následující metoda umožňuje použít oba přístupy:

private static long GetDirectorySize(DirectoryInfo directory,

bool includeSubdirectories)

{

long totalSize = 0;

// Přičítá velikosti jednotlivých souborů.

FileInfo[] files = directory.GetFiles();

foreach (FileInfo file in files)

{

totalSize += file.Length;

}

// Jestliže se to požaduje, přičte i velikosti podadresářů.

if (includeSubdirectories)

{

DirectoryInfo[] dirs = directory.GetDirectories();

foreach (DirectoryInfo dir in dirs)

{

totalSize += CalculateDirectorySize(dir, true);

}

}

return totalSize;

}

Potřebujete-li získat informace o volném místu na nějaké jednotce, obraťte se na třídu DriveInfo.

Třída DriveInfoTřída DriveInfo umožňuje získávat informace o diskových jednotkách počítače. Několik takových informa-cí vás může hodně zajímat – DriveInfo se typicky využívá pro zjištění, kolik je volného a kolik zabraného místa na dané jednotce. Členy třídy DriveInfo jsou vypsány v tabulce 12-6. Na rozdíl od tříd FileInfo a DirectoryInfo zde není k dispozici žádná třída Drive, která by poskytovala instanční verze těchto metod.

Page 48: ASP.NET 4 a C# 2010, kniha 1

TVORBA DYNAMICKÝCH STRÁNEK PROFESIONÁLN

KNIHA 1

KNIHA

1

TVOR

BA DYN

AMICKÝ

CH STR

ÁNEK PROFESION

ÁLN

ASP.NET 4 a C# 2010

ASP.NET 4 a C# 2010

A d a m F r e e m a n M a r i o S z p u s z t a

9 7 8 8 0 7 4   1 3 1 3 1 8

ISBN 978-80-7413-131-8KATALOGOVÉ ČÍSLO: ZR1003DOPORUČENÁ CENA: 890 Kč

ASP.NET 4 a C# 2010 TVORBA DYNAMICKÝCH STRÁNEK PROFESIONÁLNĚ

Matthew MacDonald, Adam Freeman, Mario Szpuszta

E N C Y K L O P E D I E Z O N E R P R E S S

Pod tímto logem vycházejí publikace určené pro každého vážného zájemce o prá-ci s počítačem. Od ryze praktických příruček a průvodců až po komplexní publi-kace o všem, co potřebuje grafi k, webdesignér, vývojář či programátor při každo-denní práci. Na slevy, které můžete získat, a vydavatelský plán, v němž vedle knih domácích odborníků najdete celou řadu titulů světově uznávaných autorů, se informujte na adrese vydavatelství.

ASP.NET je výkonná technologie Microsoftu určená pro vytváření webových apli-kací běžících na straně serveru. Prostřednictvím této rozsáhlé publikace, která byla z  praktických důvodů rozdělena do dvou samostatných knih, se můžete naučit všechno, co potřebujete ke zvládnutí ASP.NET 4 a C# 2010. Pokud jste již někdy předtím programovali v předchozí verzi ASP.NET, můžete se zaměřit pou-ze na některé (pro vás důležité) části nebo na nové funkce, například ASP.NET MVC, Silverlight či ASP.NET Dynamic Data, které jsou obsahem KNIHY 2. Pokud jste nikdy v ASP.NET neprogramovali, KNIHA 1 vám nabízí vhodné tempo výuky umožňující v krátkém čase projít všechny základní věci, které potřebujete znát v každodenní vývojářské praxi. Publikace, na které se podíleli tři zkušení autoři (Matthew MacDonald, Adam Freeman a Mario Szpuszta), obsahuje spoustu prak-tických příkladů a technik z reálného světa.

ASP.NET 4 a C# 2010, kniha 1 zahrnuje následující témata:

Základy ASP.NET (úvod do ASP.NET, Visual Studio, webové formuláře, servero-vé ovládací prvky, aplikace ASP.NET, správa stavu).

Přístup k datům (základy ADO.NET, datové komponenty a sada dat, vázání dat, bohatě vybavené datové ovládací prvky, cachování a  asynchronní stránky, soubory a proudy, LINQ, XML).

Budování webů ASP.NET (uživatelské ovládací prvky, motivy a vzory stránek, navigace po webu, nasazování webů).

ASP.NET 4 a C# 2010, kniha 2 těsně navazuje na knihu 1 a popisuje:

Bezpečnost (bezpečnostní model ASP.NET, ověřování založené na formulářích, členství, ověřování systému Windows, autorizace a role, profi ly, kryptografi e, vlastní zprostředkovatelé členství).

Pokročilé uživatelské rozhraní (vlastní serverové ovládací prvky, grafi ky, GDI+ a grafy, JavaScript a techniky Ajaxu, portály s webovými částmi, ASP.NET AJAX).

Nové směry (MCV, systém dynamických dat ASP.NET, Silverlight).

© F

oto:

Len

ka K

řížov

á

www.zoner.cz

ZONER software, a.s. významný producent softwaru v oblasti digitální fotogra e,

po íta ové gra ky a multimédií, poskytovatel internetových

služeb, souvisejících s prezentací na internetu a e-komercí,

a nakladatelství odborné literatury.

Bonusové kapitoly ke stažení:

http://www.zonerpress.cz/download/bonusove-kapitoly-aspnet.zip

Zdrojové soubory ke stažení:

http://zonerpress.cz/download/aspnet4-a-c2010.zip

ZONER software, a.s., Nové sady 18, 602 00 Brno

Zoner Presstel.: 532 190 883e-mail: [email protected]

KNIHA 1 KNIHA 1


Recommended