ADO.NET provides a powerful, extensible object model for data access, as well as an unprecedented level of integration with XML. In this chapter we reviewed the ADO.NET object model, which is divided into two groups: the managed data provider and the DataSet. We also covered optimal settings for the Connection and Command objects. We discussed the DataReader, XmlReader, and DataSet objects in detail, and we reviewed the optimal data access scenario for each object. The DataSet object provides disconnected access to data and works with the managed provider to synchronize changes back to the parent data source. We reviewed how the DataSet integrates with XML and how you can use an XSD schema to preserve relational information in XML. Finally, we reviewed data access design decisions and best practices.