Section 4 serves as an introduction to database programming, beginning with a tutorial on relational database design ("An introduction to database programming") that nicely covers basic and even intermediate relational database concepts and practices such as table design, indexing, queries, and joins. Rounding out this chapter is an overview of ADO.NET, which illustrates the concepts behind .NET's data connectivity library (".NET data proividers", "How the basic ADO.NET components work", "Concurrency and the disconnected data architecture")and introduces the key players ("How a dataset is organized", "How to work with data without using a data adapter").
The first half of the rest of this section covers using data binding to bind controls to data sources. Chapter 18 walks the reader through the process of creating a data source using the Data Source Confguration Wizard, and how to bind it to a DatagridView control (the new DataGrid introduced in Visual Studio 2005), a TextBox control, and a ComboBox control. Throughout this chapter, the author throws in additional information such as data source-specific error handling ("How to handle data provider errors", "How to handle ADO.NET errors") and nicely anticpates issues such as formatting ("How to format bound data") and query building ("How to create a parameterized query", "How to preview the data for a query", "How to view the schema for a dataset").
Chapter 19 continues the data source discussion by introducing the DataSet Designer and Query Builder as vehicles for automating data connectivity in Visual Studio applications ("How to use the DataSet Designer"), a discussion of typed datasets ("How to use code to work with a binding source or dataset"), and more advanced use of the DataGridView, specifically how to create a Master / Detail form. All of the concepts in the last two chapters are summarized using code samples from the sample application.
After covering data binding and the automated data access methods available to C# programmers, the author moves on to describe the programmatic methods of data access in "Chapter 20 - How to use ADO.NET to write your own data access code". If the previous ADO.NET data access methods are akin to teaching someone how to drive a car, this chapter is like opening the hood and handing them a wrench. Topics covered are "How to work with connections and commands", "How to execute data commands", "How to work with datasets and dataadapters", and "How to work with transactions".
The last chapter in the data access section takes the reader into advanced territory by explaining data-bound application architecture, examining the different layers of a networked and database-driven system and showing (by example) how classes can be made data-aware and bound to controls just like ADO.NET data sources. Just the inclusion of these topics in a book that is otherwise geared to those just starting out with C# programming shows that Murach is dedicated to showing his readers the paths to advanced topics, giving them the option to explore them further when they are ready.