- •Preface
- •Who Should Read This Book
- •Organization and Presentation
- •Contacting the Authors
- •Acknowledgments
- •Contents
- •Introduction
- •Why Microsoft .NET?
- •The Microsoft .NET Architecture
- •Internet Standards
- •The Evolution of ASP
- •The Benefits of ASP.NET
- •What Is .NET?
- •.NET Experiences
- •.NET Clients
- •.NET Services
- •.NET Servers
- •Review
- •Quiz Yourself
- •Installation Requirements
- •Installing ASP.NET and ADO.NET
- •Installing the .NET Framework SDK
- •Testing Your Installation
- •Support for .NET
- •Review
- •Quiz Yourself
- •Designing a Database
- •Normalization of Data
- •Security Considerations
- •Review
- •Quiz Yourself
- •Creating a Database
- •Creating SQL Server Tables
- •Creating a View
- •Creating a Stored Procedure
- •Creating a Trigger
- •Review
- •Quiz Yourself
- •INSERT Statements
- •DELETE Statements
- •UPDATE Statements
- •SELECT Statements
- •Review
- •Quiz Yourself
- •The XML Design Specs
- •The Structure of XML Documents
- •XML Syntax
- •XML and the .NET Framework
- •Review
- •Quiz Yourself
- •ASP.NET Events
- •Page Directives
- •Namespaces
- •Choosing a Language
- •Review
- •Quiz Yourself
- •Introducing HTML Controls
- •Using HTML controls
- •How HTML controls work
- •Intrinsic HTML controls
- •HTML Control Events
- •The Page_OnLoad event
- •Custom event handlers
- •Review
- •Quiz Yourself
- •Intrinsic Controls
- •Using intrinsic controls
- •Handling intrinsic Web control events
- •List Controls
- •Rich Controls
- •Review
- •Quiz Yourself
- •Creating a User Control
- •Adding User Control Properties
- •Writing Custom Control Methods
- •Implementing User Control Events
- •Review
- •Quiz Yourself
- •Common Aspects of Validation Controls
- •Display property
- •Type Property
- •Operator Property
- •Using Validation Controls
- •RequiredFieldValidator
- •RegularExpressionValidator
- •CompareValidator
- •RangeValidator
- •CustomValidator
- •ValidationSummaryx
- •Review
- •Quiz Yourself
- •Maintaining State Out of Process for Scalability
- •No More Cookies but Plenty of Milk!
- •Out of Process State Management
- •Review
- •Quiz Yourself
- •Introducing the Key Security Mechanisms
- •Web.config and Security
- •Special identities
- •Using request types to limit access
- •New Tricks for Forms-based Authentication
- •Using the Passport Authentication Provider
- •Review
- •Quiz Yourself
- •ASP.NET Updates to the ASP Response Model
- •Caching with ASP.NET
- •Page Output Caching
- •Absolute cache expiration
- •Sliding cache expiration
- •Fragment Caching
- •Page Data Caching
- •Expiration
- •File and Key Dependency and Scavenging
- •Review
- •Quiz Yourself
- •A Brief History of Microsoft Data Access
- •Differences between ADO and ADO.NET
- •Transmission formats
- •Connected versus disconnected datasets
- •COM marshaling versus text-based data transmission
- •Variant versus strongly typed data
- •Data schema
- •ADO.NET Managed Provider Versus SQL Managed Provider
- •Review
- •Quiz Yourself
- •Review
- •Quiz Yourself
- •Creating a Connection
- •Opening a Connection
- •Using Transactions
- •Review
- •Quiz Yourself
- •Building a Command
- •Connection property
- •CommandText property
- •CommandType property
- •CommandTimeout property
- •Appending parameters
- •Executing a Command
- •ExecuteNonQuery method
- •Prepare method
- •ExecuteReader method
- •Review
- •Quiz Yourself
- •Introducing DataReaders
- •Using DataReader Properties
- •Item property
- •FieldCount property
- •IsClosed property
- •RecordsAffected property
- •Using DataReader Methods
- •Read method
- •GetValue method
- •Get[Data Type] methods
- •GetOrdinal method
- •GetName method
- •Close method
- •Review
- •Quiz Yourself
- •Constructing a DataAdapter Object
- •SelectCommand property
- •UpdateCommand, DeleteCommand, and InsertCommand properties
- •Fill method
- •Update method
- •Dispose method
- •Using DataSet Objects
- •DataSetName property
- •CaseSensitive property
- •Review
- •Quiz Yourself
- •Constructing a DataSet
- •Tables property
- •TablesCollection Object
- •Count property
- •Item property
- •Contains method
- •CanRemove method
- •Remove method
- •Add method
- •DataTable Objects
- •CaseSensitive property
- •ChildRelations property
- •Columns property
- •Constraints property
- •DataSet property
- •DefaultView property
- •ParentRelations property
- •PrimaryKey property
- •Rows property
- •Dispose method
- •NewRow method
- •Review
- •Quiz Yourself
- •What Is Data Binding?
- •Binding to Arrays and Extended Object Types
- •Binding to Database Data
- •Binding to XML
- •TreeView Control
- •Implement the TreeView server control
- •Review
- •Quiz Yourself
- •DataGrid Control Basics
- •Binding a set of data to a DataGrid control
- •Formatting the output of a DataGrid control
- •Master/Detail Relationships with the DataGrid Control
- •Populating the Master control
- •Filtering the detail listing
- •Review
- •QUIZ YOURSELF
- •Updating Your Data
- •Handling the OnEditCommand Event
- •Handling the OnCancelCommand Event
- •Handling the OnUpdateCommand Event
- •Checking that the user input has been validated
- •Executing the update process
- •Deleting Data with the OnDeleteCommand Event
- •Sorting Columns with the DataGrid Control
- •Review
- •Quiz Yourself
- •What Is Data Shaping?
- •Why Shape Your Data?
- •DataSet Object
- •Shaping Data with the Relations Method
- •Review
- •Quiz Yourself
- •OLEDBError Object Description
- •OLEDBError Object Properties
- •OLEDBError Object Methods
- •OLEDBException Properties
- •Writing Errors to the Event Log
- •Review
- •Quiz Yourself
- •Introducing SOAP
- •Accessing Remote Data with SOAP
- •SOAP Discovery (DISCO)
- •Web Service Description Language (WSDL)
- •Using SOAP with ASP.NET
- •Review
- •Quiz Yourself
- •Developing a Web Service
- •Consuming a Web Service
- •Review
- •Quiz Yourself
- •ASP and ASP.NET Compatibility
- •Scripting language limitations
- •Rendering HTML page elements
- •Using script blocks
- •Syntax differences and language modifications
- •Running ASP Pages under Microsoft.NET
- •Using VB6 Components with ASP.NET
- •Review
- •Quiz Yourself
- •Preparing a Migration Path
- •ADO and ADO.NET Compatibility
- •Running ADO under ASP.NET
- •Early Binding ADO COM Objects in ASP.NET
- •Review
- •Quiz Yourself
- •Answers to Part Reviews
- •Friday Evening Review Answers
- •Saturday Morning Review Answers
- •Saturday Afternoon Review Answers
- •Saturday Evening Review Answers
- •Sunday Morning Review Answers
- •Sunday Afternoon Review Answers
- •What’s on the CD-ROM
- •System Requirements
- •Using the CD with Windows
- •What’s on the CD
- •The Software Directory
- •Troubleshooting
- •ADO.NET Class Descriptions
- •Coding Differences in ASP and ASP.NET
- •Retrieving a Table from a Database
- •Displaying a Table from a Database
- •Variable Declarations
- •Statements
- •Comments
- •Indexed Property Access
- •Using Arrays
- •Initializing Variables
- •If Statements
- •Case Statements
- •For Loops
- •While Loops
- •String Concatenation
- •Error Handling
- •Conversion of Variable Types
- •Index
Session 24—Beating the CRUD out of the DataGrid Control |
253 |
QUIZ YOURSELF
1.How do you turn on the editing mode for a DataGrid control? (See “Updating Your Data.”)
2.How can you use both a range and required field validator to validate user input? (See “Handling the OnUpdateCommand Event.”)
3.How can you allow the user to better control how a column is sorted? For instance could you use an external dropdown list to sort columns in a specific manner? (See “Sorting Columns with the DataGrid Control.”)
S E S S I O N
25
Data Shaping with ADO.NET
Session Checklist
Introducing data shaping
Handling hierarchical datasets
In this session we will explore the ability of the DataSet object to support the use of parent-child relationships between tables.
What Is Data Shaping?
Data shaping is simply the process of reflecting the parent-child relationships that exist between data objects. For instance, let’s look at demonstrating the parent-child relationship between two data objects: a set of stores and a set of titles sold by the stores. Figure 25-1 illustrates this relationship.
In ASP you could store these relationships in a hierarchical recordset by using the Shape Provider, and then produce a structured output representing the hierarchy to the user. The shaping syntax allowed you to build these parent-child relationships easily as illustrated in Listing 25-1.
256 |
Sunday Morning |
Figure 25-1 Diagram of a parent child relationship
Listing 25-1 Example of Using the ADO Shape Provider
<HTML>
<HEAD>
<SCRIPT LANGUAGE=”VBScript” RUNAT=”Server”> Function DisplayShape()
Dim myConnection Dim ShapeCommand Dim StoresRecordSet Dim SalesRecordSet
Set myConnection=Server.CreateObject(“ADODB.Connection”) myConnection.Provider =”MSDataShape” myConnection.ConnectionString=”DRIVER=SQL
Server;UID=sa;DATABASE=pubs;SERVER=(local);PWD=;”
myConnection.Open
‘Constructing the Shape Command to Build RecordSet
ShapeCommand = “SHAPE {SELECT stor_id, stor_name, stor_address FROM stores}” ShapeCommand = ShapeCommand &”APPEND ({select *, title from sales inner join
titles on sales.title_id=titles.title_id} AS Sales”
ShapeCommand = ShapeCommand &” RELATE stor_id TO stor_id)”
Set StoresRecordSet = Server.CreateObject(“ADODB.Recordset”)
StoresRecordSet.Open ShapeCommand, myConnection
Response.Write(“<H2>List of Titles Sold By Store</H2>”)
Do While Not StoresRecordSet.EOF
Response.Write(“<BR><B><I>”)
Session 25—Data Shaping with ADO.NET |
257 |
Response.Write(“Store Name: “ & StoresRecordSet(“stor_name”)) Response.Write(“</B></I>”)
Response.Write(“<p>Address: “ & StoresRecordSet(“stor_address”) & “</p>”) Set SalesRecordSet= StoresRecordSet(“Sales”).Value Response.Write(“<blockquote>”)
Response.Write(“<p><i>List of Titles sold by “ & StoresRecordSet(“stor_name”) &”</i></p>”)
Do While Not SalesRecordSet.EOF
Response.Write(“<p>Title = “& SalesRecordSet(“title”) & “</p>”) SalesRecordSet.movenext
Loop Response.Write(“</blockquote>”) StoresRecordSet.movenext
Loop
End Function </SCRIPT>
</HEAD>
<BODY>
<%=DisplayShape%>
</BODY>
</HTML>
Figure 25-2 shows the output from this code segment, producing the expected representation of the parent-child relationships.
Figure 25-2 Resulting output of using the hierarchical recordset in ASP
ADO.NET does not support the use of the MSDataShape Provider or the shape syntax. Instead ADO.NET utilizes a method of the DataSet object, the Relations() method.