Accessing Data with ADO.NET
The ADO.NET Object Model
Connecting to Data
Understanding Connection Pooling
Using Provider Statistics
Retrieving Data
Introducing Command Classes
Working with Data Readers
Digging Deeper into Commands and DataReaders
Caching Data in DataSets
Populating a DataTable
Filling DataSets Using a DataAdapter
Using the Load Method
Retrieving Schema Information
DataSets and XML
Applying Constraints
Using Constraints
Foreign Key Constraints
Other Constraints
Data Relations
Creating DataRelations
Navigation Pathways
Expressions and Relations
Specifying XML Nesting
Updating Data
Creating Commands with CommandBuilders
Creating Custom Commands
Using Stored Procedures
Performing Batch Updates
Using Strongly Typed DataSet Classes
Using a Loosely Typed DataSet
Creating a Strongly Typed DataSet
Using a Strongly Typed DataSet
Issues with Using a Strongly Typed DataSet
Handling Exceptions and Data Errors
Using Structured Exception Handling
Handling Provider Errors
Using Transactions
Handling Concurrency Conflicts
Searching, Sorting, and Filtering
The Sample Project
Working with DataTables
Working with DataViews
Handling AutoIncrement Columns
The AutoIncrement Property
Retrieving New Database Values
Avoiding Multi-User Conflicts
Merging Inserted Rows
Other Considerations
XML Techniques
ADO.NET and XML
Saving DataSet Data as XML
Loading XML Data into a DataSet
Working with DataSets and XML Together
Working with XML Data in SQL Server
Features Supporting SQL Server 2005
Enumerating Servers on a Network
Asynchronous Processing
Multiple Active Result Sets (MARS)
Bulk Copy Operations
SQL Server Max Data Types
SQL Server User Defined Types
SQL Server Snapshot Isolation