The following table shows the mandatory and optional interfaces defined by OLE DB for a session object.
Session
| Interface | Required? | Implemented by OLE DB Template Classes? | 
| IGetDataSource | Mandatory | Yes | 
| IOpenRowset | Mandatory | Yes | 
| ISessionProperties | Mandatory | Yes | 
| IDBCreateCommand | Optional | Yes | 
| IDBSchemaRowset | Optional | Yes | 
| IIndexDefinition | Optional | No | 
| ISupportErrorInfo | Optional | No | 
| ITableDefinition | Optional | No | 
| ITransactionJoin | Optional | No | 
| ITransactionLocal | Optional | No | 
| ITransactionObject | Optional | No | 
The session object creates a rowset object. If the provider supports commands, the session also creates a command object (CCommand, implementing the OLE DB TCommand). The command object implements the ICommand interface and uses the ICommand::Execute method to execute commands on the rowset, as shown in the following figure.
