Throughout the last two chapters, you have been using data providers but might not have known it. A data provider is a collection of classes that implement standard interfaces and inherit from predefined abstract base classes to provide a standard means by which a developer can access relational data. For example, ADO.NET comes with a SQL provider, an Oracle provider, an OLE DB provider, and an ODBC provider. All of them, by virtue of their compliance to data provider standards, have a similar list of classes, methods, and properties. This allows developers to reuse their knowledge of one provider to develop against a different provider.
These providers all contain connections, commands, command parameters, various data readers, and data adapters, all of which are specialized to their specific back end. So, although both the Oracle provider and the SQL provider have connections, each one uses a different means for communicating with their respective databases.
As you will see throughout the course of this chapter, data providers are easy to use, flexible, and extremely powerful.