Siêu thị PDFTải ngay đi em, trời tối mất

Thư viện tri thức trực tuyến

Kho tài liệu với 50,000+ tài liệu học thuật

© 2023 Siêu thị PDF - Kho tài liệu học thuật hàng đầu Việt Nam

Pro ASP.NET 2.0 in VB 2005
PREMIUM
Số trang
1297
Kích thước
21.8 MB
Định dạng
PDF
Lượt xem
1871

Pro ASP.NET 2.0 in VB 2005

Nội dung xem thử

Mô tả chi tiết

Laurence Moroney

Matthew MacDonald (Ed.)

Pro ASP.NET 2.0

in VB 2005

5637ch00FM.qxd 12/23/05 11:03 AM Page i

Pro ASP.NET 2.0 in VB 2005

Copyright © 2006 by Laurence Moroney, Matthew MacDonald (Ed.), K. Scott Allen, James Avery, Russ

Basiura, Mike Batongbacal, Marco Bellinaso, Matt Butler, Andreas Eide, Daniel Cazzulino, Michael Clark,

Richard Conway, Robert Eisenberg, Brady Gaster, James Greenwood, Kevin Hoffman, Erik Johansson,

Angelo Kastroulis, Dan Kent, Sitaraman Lakshminarayanan, Don Lee, Christopher Miller, Matt Milner,

Jan Narkiewicz, Matt Odhner, Ryan O’Keefe, Andrew Reid, Matthew Reynolds, Enrico Sabbadin, Bill Sempf,

Doug Seven, Srinivasa Sivkumar, Thiru Thangarathinam, Doug Thews

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 owner and the publisher.

ISBN-13 (pbk): 978-1-59059-563-3

ISBN-10 (pbk): 1-59059-563-7

Library of Congress Cataloging-in-Publication data is available upon request.

Printed and bound in the United States of America 9 8 7 6 5 4 3 2 1

Trademarked names may appear in this book. Rather than use a trademark symbol with every occurrence

of a trademarked name, we use the names only in an editorial fashion and to the benefit of the trademark

owner, with no intention of infringement of the trademark.

Lead Editor: Tony Davis

Technical Reviewer: Andy Olsen

Editorial Board: Steve Anglin, Dan Appleman, Ewan Buckingham, Gary Cornell, Tony Davis, Jason Gilmore,

Jonathan Hassell, Chris Mills, Dominic Shakeshaft, Jim Sumser

Project Manager: Richard Dal Porto

Copy Edit Manager: Nicole LeClerc

Copy Editor: Kim Wimpsett

Assistant Production Director: Kari Brooks-Copony

Production Editor: Linda Marousek

Compositor and Artist: Kinetic Publishing Services, LLC

Proofreaders: Linda Seifert and Nancy Sixsmith

Indexer: Broccoli Information Management

Cover Designer: Kurt Krames

Manufacturing Director: Tom Debolski

Distributed to the book trade worldwide by Springer-Verlag New York, Inc., 233 Spring Street, 6th Floor,

New York, NY 10013. Phone 1-800-SPRINGER, fax 201-348-4505, e-mail [email protected], or

visit http://www.springeronline.com.

For information on translations, please contact Apress directly at 2560 Ninth Street, Suite 219, Berkeley, CA

94710. Phone 510-549-5930, fax 510-549-5939, e-mail [email protected], or visit http://www.apress.com.

The information in this book is distributed on an “as is” basis, without warranty. Although every precaution

has been taken in the preparation of this work, neither the author(s) nor Apress shall have any liability to

any person or entity with respect to any loss or damage caused or alleged to be caused directly or indirectly

by the information contained in this work.

The source code for this book is available to readers at http://www.apress.com in the Source Code section.

You will need to answer questions pertaining to this book in order to successfully download the code.

5637ch00FM.qxd 12/23/05 11:03 AM Page ii

I would like to dedicate this book to a few people

without whom it never would have been possible.

To Yaacov and Philippe Cohen at Mainsoft,

who are remarkable men creating an excellent working

environment with God at its center. I appreciate every minute,

every conversation, and every e-mail I get from you guys.

Thanks!

To my wife, Rebecca, and children, Claudia and Christopher,

for their eternal patience and support.

Thank you so much!

To the God of Abraham, Isaac, Jacob, and Jesus

through whom all things are possible.

5637ch00FM.qxd 12/23/05 11:03 AM Page iii

5637ch00FM.qxd 12/23/05 11:03 AM Page iv

Contents at a Glance

About the Author. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . xxvii

About the Editor . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . xxix

About the Technical Reviewer. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . xxxi

Introduction . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . xxxiii

PART 1 ■ ■ ■ Core Concepts

■CHAPTER 1 Introducing ASP.NET . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3

■CHAPTER 2 Visual Studio 2005 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 23

■CHAPTER 3 Web Forms . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 63

■CHAPTER 4 Server Controls . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 103

■CHAPTER 5 ASP.NET Applications . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 151

■CHAPTER 6 State Management . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 195

PART 2 ■ ■ ■ Data Access

■CHAPTER 7 ADO.NET Fundamentals . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 229

■CHAPTER 8 Data Components and the DataSet . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 265

■CHAPTER 9 Data Binding. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 295

■CHAPTER 10 Rich Data Controls . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 335

■CHAPTER 11 Caching . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 391

■CHAPTER 12 XML . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 425

■CHAPTER 13 Files and Streams . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 469

PART 3 ■ ■ ■ Building ASP.NET Websites

■CHAPTER 14 User Controls . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 501

■CHAPTER 15 Themes and Master Pages . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 523

■CHAPTER 16 Website Navigation. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 553

■CHAPTER 17 Resources and Localization . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 599

■CHAPTER 18 Website Deployment. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 619

v

5637ch00FM.qxd 12/23/05 11:03 AM Page v

59cf4c9f76dd75c1cc678ccf0261fa69

PART 4 ■ ■ ■ Security

■CHAPTER 19 The ASP.NET Security Model . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 669

■CHAPTER 20 Forms Authentication . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 691

■CHAPTER 21 Membership . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 709

■CHAPTER 22 Windows Authentication . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 751

■CHAPTER 23 Authorization and Roles. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 777

■CHAPTER 24 Profiles . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 803

■CHAPTER 25 Cryptography . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 839

■CHAPTER 26 Custom Membership Providers . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 867

PART 5 ■ ■ ■ Advanced User Interface

■CHAPTER 27 Custom Server Controls. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 897

■CHAPTER 28 Design-Time Support . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 939

■CHAPTER 29 JavaScript. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 973

■CHAPTER 30 Dynamic Graphics and GDI+. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1011

■CHAPTER 31 Portals with WebPart Pages . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1043

PART 6 ■ ■ ■ Web Services

■CHAPTER 32 Creating Web Services . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1087

■CHAPTER 33 Web Service Standards and Extensions . . . . . . . . . . . . . . . . . . . . . . . . . . 1129

■CHAPTER 34 Advanced Web Services. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1173

■INDEX . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1209

vi

5637ch00FM.qxd 12/23/05 11:03 AM Page vi

Contents

About the Author. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . xxvii

About the Editor . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . xxix

About the Technical Reviewer. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . xxxi

Introduction . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . xxxiii

PART 1 ■ ■ ■ Core Concepts

■CHAPTER 1 Introducing ASP.NET . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3

The Evolution of Web Development . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3

The Development World Before ASP.NET . . . . . . . . . . . . . . . . . . . . . . . . . . . 4

What’s Wrong with Classic ASP? . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 4

ASP.NET 1.0 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 6

Seven Important Facts About ASP.NET. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 7

Fact 1: ASP.NET Is Integrated with the .NET Framework . . . . . . . . . . . . . . . 7

Fact 2: ASP.NET Is Compiled, Not Interpreted. . . . . . . . . . . . . . . . . . . . . . . . 7

Fact 3: ASP.NET Is Multilanguage . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 9

Fact 4: ASP.NET Runs Inside the Common Language Runtime . . . . . . . . . 11

Fact 5: ASP.NET Is Object-Oriented . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 12

Fact 6: ASP.NET Is Multidevice and Multibrowser . . . . . . . . . . . . . . . . . . . 14

Fact 7: ASP.NET Is Easy to Deploy and Configure . . . . . . . . . . . . . . . . . . . 14

ASP.NET 2.0: The Story Continues . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 15

Visual Basic 2005 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 15

Visual Studio 2005 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 16

ASP.NET 2.0 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 16

Summary . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 21

■CHAPTER 2 Visual Studio 2005 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 23

The .NET Development Model . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 24

The Compiler . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 25

The Visual Studio 2005 IDE . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 25

Websites in Visual Studio . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 26

Projectless Development . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 29

Migrating a Visual Studio .NET Project. . . . . . . . . . . . . . . . . . . . . . . . . . . . 30

Designing a Web Page . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 31

vii

5637ch00FM.qxd 12/23/05 11:03 AM Page vii

The Visual Studio IDE . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 35

Solution Explorer. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 36

Document Window . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 37

Toolbox . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 37

Error List and Task List . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 38

Server Explorer . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 40

The Code Editor . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 41

Adding Assembly References . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 42

IntelliSense and Outlining. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 44

The Coding Model . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 47

How Code-Behind Files Are Connected to Pages. . . . . . . . . . . . . . . . . . . . 50

How Control Tags Are Connected to Page Variables . . . . . . . . . . . . . . . . . 50

How Events Are Connected to Event Handlers . . . . . . . . . . . . . . . . . . . . . . 51

Visual Studio Debugging . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 52

Single-Step Debugging. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 53

Advanced Breakpoints . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 56

Variable Watches . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 57

Visual Studio Macros . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 58

ASP.NET Development Helper . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 60

Summary . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 62

■CHAPTER 3 Web Forms . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 63

Page Processing. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 64

HTML Forms . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 64

Dynamic Interfaces. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 66

The ASP.NET Event Model. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 66

Automatic Postbacks . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 67

View State. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 69

XHTML Compliance . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 72

Web Forms Processing Stages. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 76

Page Framework Initialization . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 77

User Code Initialization . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 77

Validation . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 78

Event Handling . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 78

Automatic Data Binding . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 79

Cleanup. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 79

A Page Flow Example . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 80

The Page As a Control Container . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 82

Showing the Control Tree . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 82

The Page Header . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 86

Dynamic Control Creation. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 87

viii ■CONTENTS

5637ch00FM.qxd 12/23/05 11:03 AM Page viii

The Page Class. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 88

Session, Application, and Cache. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 89

Request. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 89

Response . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 91

Server . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 92

User. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 94

Trace . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 94

Accessing the HTTP Context in Another Class . . . . . . . . . . . . . . . . . . . . . 101

Summary . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 101

■CHAPTER 4 Server Controls . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 103

Types of Server Controls . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 104

The Server Control Hierarchy . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 105

HTML Server Controls . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 106

The HtmlControl Class . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 107

The HtmlContainerControl Class. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 108

The HtmlInputControl Class . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 108

The HTML Server Control Classes . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 108

Setting Style Attributes and Other Properties. . . . . . . . . . . . . . . . . . . . . . 110

Programmatically Creating Server Controls . . . . . . . . . . . . . . . . . . . . . . . 111

Handling Server-Side Events . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 113

Web Controls . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 116

The WebControl Base Class . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 117

Basic Web Control Classes . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 117

Units . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 119

Enumerated Values . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 120

Colors . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 120

Fonts . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 121

Focus. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 122

The Default Button . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 123

Scrollable Panels . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 123

Handling Web Control Events . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 124

The List Controls . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 127

The Selectable List Controls . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 128

The BulletedList Control . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 130

Input Validation Controls. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 132

The Validation Controls . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 132

The Validation Process . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 133

The BaseValidator Class . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 135

The RequiredFieldValidator Control . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 135

The RangeValidator Control . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 136

■CONTENTS ix

5637ch00FM.qxd 12/23/05 11:03 AM Page ix

The CompareValidator Control . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 136

The RegularExpressionValidator Control . . . . . . . . . . . . . . . . . . . . . . . . . 137

The CustomValidator Control . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 140

The ValidationSummary Control . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 141

Using the Validators Programmatically. . . . . . . . . . . . . . . . . . . . . . . . . . . 142

Validation Groups . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 143

The ASP.NET Rich Controls. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 144

The AdRotator Control. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 145

The Calendar Control . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 147

Summary . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 149

■CHAPTER 5 ASP.NET Applications . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 151

Anatomy of an ASP.NET Application . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 151

The Application Domain . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 152

Application Lifetime . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 153

Application Updates . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 154

Application Directory Structure . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 154

The Global.asax Application File. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 155

Application Events . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 156

Demonstrating Application Events . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 158

ASP.NET Configuration . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 159

The Machine.config File . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 160

The Web.config File . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 162

Configuration Settings . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 165

Reading and Writing Configuration Sections Programmatically . . . . . . . 169

The Website Administration Tool (WAT) . . . . . . . . . . . . . . . . . . . . . . . . . . 171

Extending the Configuration File Structure. . . . . . . . . . . . . . . . . . . . . . . . 173

Encrypting Configuration Sections . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 176

.NET Components. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 177

Creating a Component . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 178

Using a Component Through the App_Code Directory. . . . . . . . . . . . . . . 179

Using a Component Through the Bin Directory . . . . . . . . . . . . . . . . . . . . 180

Extending the HTTP Pipeline . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 182

HTTP Handlers and HTTP Modules. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 183

Creating a Custom HTTP Handler. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 185

Configuring a Custom HTTP Handler . . . . . . . . . . . . . . . . . . . . . . . . . . . . 186

Registering HTTP Handlers Without Configuring IIS. . . . . . . . . . . . . . . . . 187

Creating an Advanced HTTP Handler . . . . . . . . . . . . . . . . . . . . . . . . . . . . 188

Creating a Custom HTTP Module . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 191

Summary . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 193

x ■CONTENTS

5637ch00FM.qxd 12/23/05 11:03 AM Page x

■CHAPTER 6 State Management. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 195

ASP.NET State Management . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 196

View State . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 198

A View State Example. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 198

Storing Objects in View State . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 200

Retaining Member Variables. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 202

Assessing View State . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 203

Trimming View State in a List Control . . . . . . . . . . . . . . . . . . . . . . . . . . . 205

View State Security. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 205

Transferring Information. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 207

The Query String. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 207

Cross-Page Posting . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 208

Cross-Page Posting and Validation. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 211

Custom Cookies . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 212

Session State . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 214

Session Architecture. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 214

Using Session State . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 215

Configuring Session State . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 217

Securing Session State. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 222

Application State . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 222

Shared Application Variables . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 224

Summary . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 226

PART 2 ■ ■ ■ Data Access

■CHAPTER 7 ADO.NET Fundamentals. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 229

The ADO.NET Architecture . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 230

ADO.NET Data Providers. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 230

Standardization in ADO.NET . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 232

SQL Server 2005 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 233

Fundamental ADO.NET Classes . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 234

The Connection Class . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 235

Connection Strings. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 235

Testing a Connection . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 236

Connection Pooling. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 238

Connection Statistics . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 240

The Command and DataReader Classes . . . . . . . . . . . . . . . . . . . . . . . . . . . . 240

Command Basics . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 240

The DataReader Class . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 242

■CONTENTS xi

5637ch00FM.qxd 12/23/05 11:03 AM Page xi

The ExecuteReader() Method and the DataReader . . . . . . . . . . . . . . . . . 242

The ExecuteScalar() Method. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 247

The ExecuteNonQuery() Method. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 247

SQL Injection Attacks . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 248

Using Parameterized Commands . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 250

Calling Stored Procedures . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 251

Transactions . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 253

Transactions and ASP.NET Applications . . . . . . . . . . . . . . . . . . . . . . . . . . 254

Isolation Levels . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 257

Savepoints . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 259

Nested Transactions . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 259

Provider-Agnostic Code . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 259

Creating the Factory . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 260

Create Objects with Factory . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 261

A Query with Provider-Agnostic Code . . . . . . . . . . . . . . . . . . . . . . . . . . . 262

Summary . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 263

■CHAPTER 8 Data Components and the DataSet. . . . . . . . . . . . . . . . . . . . . . . . . 265

Building a Data Access Component . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 265

The Data Package. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 267

The Stored Procedures . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 268

The Data Utility Class . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 269

Testing the Component. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 274

Disconnected Data . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 275

Web Applications and the DataSet . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 276

XML Integration . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 277

The DataSet Class . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 277

The DataTable Class . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 279

The DataRow Class. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 279

The DataAdapter Class. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 279

Filling a DataSet . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 281

Working with Multiple Tables and Relationships . . . . . . . . . . . . . . . . . . . 282

Searching for Specific Rows. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 285

Using the DataSet in a Custom Data Class . . . . . . . . . . . . . . . . . . . . . . . 286

Data Binding . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 286

The DataView Class . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 287

Sorting with a DataView . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 287

Filtering with a DataView . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 289

Advanced Filtering with Relationships . . . . . . . . . . . . . . . . . . . . . . . . . . . 291

Calculated Columns . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 292

Summary . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 294

xii ■CONTENTS

5637ch00FM.qxd 12/23/05 11:03 AM Page xii

■CHAPTER 9 Data Binding . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 295

Basic Data Binding . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 296

Single-Value Binding . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 296

Other Types of Expressions . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 298

Repeated-Value Binding . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 302

Data Source Controls . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 309

The Page Life Cycle with Data Binding . . . . . . . . . . . . . . . . . . . . . . . . . . 310

The SqlDataSource. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 311

Selecting Records. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 312

Parameterized Commands . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 314

Handling Errors . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 318

Updating Records . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 318

Disadvantages of the SqlDataSource . . . . . . . . . . . . . . . . . . . . . . . . . . . . 322

The ObjectDataSource . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 323

Selecting Records. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 324

Updating Records . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 328

Updating with a Data Object. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 329

The Limits of the Data Source Controls . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 331

The Problem . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 332

Adding the Extra Items . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 333

Handling the Extra Options with the SqlDataSource . . . . . . . . . . . . . . . . 333

Handling the Extra Options with the ObjectDataSource. . . . . . . . . . . . . . 334

Summary . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 334

■CHAPTER 10 Rich Data Controls . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 335

The GridView . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 336

Defining Columns . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 336

Formatting the GridView. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 339

Formatting Fields . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 340

Styles . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 341

Formatting-Specific Values. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 344

GridView Row Selection . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 346

Using Selection to Create a Master-Details Form . . . . . . . . . . . . . . . . . . 347

The SelectedIndexChanged Event . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 349

Using a Data Field As a Select Button . . . . . . . . . . . . . . . . . . . . . . . . . . . 350

Sorting the GridView. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 350

Sorting with the SqlDataSource . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 351

Sorting with the ObjectDataSource . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 352

Sorting and Selection . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 353

Advanced Sorting . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 354

■CONTENTS xiii

5637ch00FM.qxd 12/23/05 11:03 AM Page xiii

Paging the GridView. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 355

Automatic Paging . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 356

Custom Pagination with the ObjectDataSource . . . . . . . . . . . . . . . . . . . . 357

Customizing the Pager Bar. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 360

GridView Templates . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 361

Using Multiple Templates . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 363

Editing Templates in Visual Studio . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 364

Binding to a Method . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 364

Handling Events in a Template . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 366

Editing with a Template . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 367

The DetailsView and FormView . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 372

The DetailsView . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 372

The FormView. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 375

Advanced Grids . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 376

Summaries in the GridView . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 376

A Parent/Child View in a Single Table. . . . . . . . . . . . . . . . . . . . . . . . . . . . 378

Serving Images from a Database . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 380

Detecting Concurrency Conflicts . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 385

Summary . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 389

■CHAPTER 11 Caching . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 391

Understanding ASP.NET Caching . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 392

Output Caching. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 393

Declarative Output Caching . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 393

Caching and the Query String . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 394

Caching with Specific Query String Parameters . . . . . . . . . . . . . . . . . . . 395

Custom Caching Control. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 396

Caching with the HttpCachePolicy Class . . . . . . . . . . . . . . . . . . . . . . . . . 397

Post-Cache Substitution and Fragment Caching . . . . . . . . . . . . . . . . . . . 398

Cache Profiles. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 400

Caching to Disk. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 401

Data Caching . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 401

Adding Items to the Cache . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 402

A Simple Cache Test. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 404

Cache Priorities. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 405

Caching with the Data Source Controls . . . . . . . . . . . . . . . . . . . . . . . . . . 406

Cache Dependencies . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 409

File and Cache Item Dependencies . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 409

Aggregate Dependencies . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 411

The Item Removed Callback. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 411

Understanding SQL Cache Notifications. . . . . . . . . . . . . . . . . . . . . . . . . . 413

Cache Notifications in SQL Server 2000 or SQL Server 7 . . . . . . . . . . . . 415

Cache Notifications in SQL Server 2005 . . . . . . . . . . . . . . . . . . . . . . . . . 419

xiv ■CONTENTS

5637ch00FM.qxd 12/23/05 11:03 AM Page xiv

Tải ngay đi em, còn do dự, trời tối mất!