% group # Abstract accessors %> <% order # 20 %>
The following example demonstrates how to create and use an abstract data accessor class. All abstract methods of the class are generated at run-time depending on each method declaration. Every part of the method declaration is important. Method's return value specifies one of the Execute methods in the following way:
| Return Type | Execute Method |
|---|---|
| IDataReader interface | ExecuteReader |
| Subclass of DataSet | ExecuteDataSet |
| Subclass of DataTable | ExecuteDataTable |
| Class implementing the IList interface | ExecuteList or ExecuteScalarList |
| Class implementing the IDictionary interface | ExecuteDictionary or ExecuteScalarDictionary |
| void | ExecuteNonQuery |
| string, byte[] or value type | ExecuteScalar |
| In any other case | ExecuteObject |