General Implementation Notes
The following notes discuss how the ODBC Provider is implemented.
-
When the consumer calls IUnknown::Release for a session and the reference count of the session drops to zero (that is, when the session is actually released), any outstanding transactions are aborted.
-
All support objects (conversion object, temporary table service object, and error collection object) must be registered for the ODBC Provider to be instantiated. In addition, the memory and array manager must be in the ODBC Provider directory or in the path.
-
Although the ODBC Provider advertises support for both threading models, only the free-threaded model is supported.
-
Although the OLE DB Programmer’s Reference specifies that methods capable of returning DB_S_ERRORSOCCURRED will do so only when one or more errors occur, the ODBC Provider returns DB_S_ERRORSOCCURRED when a warning or an error occurs in one or more items. The OLE DB Programmer’s Reference specifies that if only warnings occur, providers should return S_OK.
-
The ODBC Provider does not support the binding of output parameters more than once in a single accessor. This is due to the lack of support for binding an output parameter to different addresses in ODBC.
-
If a command times out, one of the following errors is returned:
-
ICommand::Execute returns DB_E_ABORTLIMITREACHED.
-
IOpenRowset::OpenRowset returns E_FAIL.
-
IDBSchemaRowset::GetRowset returns E_FAIL.
-
IMultipleResults::GetResult returns DB_E_ABORTLIMITREACHED.
-
IColumnsRowset::GetColumnsRowset returns E_FAIL.