Why is the use of interface references (e.g. IDataReader and IDbConnection) preferred over use of references whose type matches the database specific classes being created (e.g. SqlDataReader and SqlConnection)?

Using the interface reference makes the code more generic by reducing the amount of database specific classes hardcoded into the application. It is therefore much easier to switch databases if needed.