IRowset: Notes

Limitations

  • The ODBC Provider does not support execution of RestartPosition when the command text contains parameters; the underlying ODBC driver must, however, support SQLExtendedFetch.

  • With IRowset::RestartPosition, the ODBC Provider does not return DB_S_COLUMNSCHANGED when it is supposed to. Instead, it returns E_FAIL.

  • If the row on which the rowset is currently positioned is deleted, the consumer must execute IRowset::RestartPosition before retrieving additional row handles with IRowset::GetNextRows.

  • If the columns in the underlying data store change and the consumer requests additional rows with IRowset::GetNextRows, the ODBC Provider will fail with the return code E_FAIL.

  • If the columns in the underlying data store change, the consumer calls IRowset::RestartPosition, and the reposition operation causes the command to be reexecuted, the ODBC Provider will fail with the return code E_FAIL. The rowset is now invalid, and any method other than ReleaseRows or ReleaseAccessor will fail. If this occurs, the consumer must release all accessors, row handles, and the rowset and must execute the command that created the rowset again.

  • When using IRowset::GetData, you can bind to only one long data column based on ISequentialStream; the ODBC Provider can bind to any number of long data columns not based on ISequentialStream.

  • IRowset::GetData may return incorrect data for an SQL_VARIANT column based on the value of DBPROP_IRowsetLocate. If DBPROP_IRowsetLocate is set to false and DBPROP_ACCESSORDER is set to DBPROPVAL_AO_RANDOM_REQUIRED, the ODBC Provider attempts to convert the data itself from DBTYPE_BYTES to DBTYPE_WSTR. This converts each byte to two ASCII digits.

Implementation Notes

GetNextRows may skip over rows if the underlying ODBC driver compacts data and some rows of the current rowset have been deleted.

This topic is a part of: