| A1: | A .NET data provider must supply a connection, command, DataReader, and DataAdapter object to provide access to its data source. |
| A2: | b is the correct choice. a and c are invalid statements. |
| A3: | ExecuteNonQuery() executes a command but does not return a resultset. ExecuteReader() returns a resultset in response to a query. ExecuteScalar() returns a single value or null if the query generates no value. |
| A4: | The DataReader remains connected to a data source and returns data in a forward, read-only cursor. A DataAdapter is a bridge between a data source and an internal data store. It typically loads data from a data source into a DataSet. It can also update the data source. |
| A5: | A DataSet object contains one or more DataTables. |
| A6: | Rejected and Changed are not valid DataRowState values. Detached, Unchanged, and Modified are the other values. |
| A7: | A DataSet schema can be created (without loading actual XML data) by DataInferXmlSchema(xml file); |