The goal of the Database Template Library is to make ODBC recordsets look just like an STL container. As a user, you can move through containers using standard STL iterators, and if you insert(), erase(), or replace() records in the containers, changes can be automatically committed to the database for you. The library's compliance with the STL iterator and container standards means you can plug the abstractions into a wide variety of STL algorithms for data storage, searching, and manipulation. In addition, the C++ reflection mechanism used by the library to bind to database tables allows generic indexing and lookup properties to be added to the containers with no special code required from the enduser. Because the code takes full advantage of the template mechanism, the library adds minimal overhead compared with using raw ODBC calls to access a database.