PRB: E_NOINTERFACE Returned from CRowset Move MethodsID: Q190904
|
When calling MoveFirst(), MoveNext(), MovePrev(), or MoveLast() using the OLE DB Consumer classes on a rowset with more than one BLOB column, a value of E_NOINTERFACE is returned. This occurs when the OLE DB Provider for ODBC is used.
The OLEDB Provider for ODBC supports binding to only one storage column (ISequentialStream) per record at one time.
Either remove the extra BLOB column entry in the column map and the SELECT
statement, or move the column into a separate accessor and access one BLOB
field at a time. If the latter option is chosen, you must release the first
ISequentialStream before getting the next ISequentialStream.
For example, the following code demonstrates how you might fetch two BLOB
columns:
class CTable1Accessor
{
public:
TCHAR m_field1[51];
ISequentialStream* m_pField2;
ISequentialStream* m_pField3;
BEGIN_ACCESSOR_MAP(CTable1Accessor, 2)
BEGIN_ACCESSOR(0, true)
COLUMN_ENTRY(1, m_field1)
BLOB_ENTRY(2, IID_ISequentialStream, STGM_READ, m_field2)
END_ACCESSOR()
BEGIN_ACCESSOR(1, false)
BLOB_ENTRY(3, IID_ISequentialStream, STGM_READ, m_field3)
END_ACCESSOR()
END_ACCESSOR_MAP()
...
};
void SomeFunc()
{
CTable1 t1;
t1.Open();
t1.MoveNext();
// Read the data from t1.m_pField2 ISequentialStream *
t1.m_pField2->Release(); // release ISequentialStream for first BLOB
t1.GetData(1); // go get ISequentialStream for second BLOB
...
}
This behavior is by design.
For more information about this behavior, refer to OLE DB for ODBC Provider section in the DASDK documentation in MSDN and MSDASQLreadme.txt.
Additional query words: kbvc600 kbTemplate kbODBC kbOLEDB kbProvider
Keywords : kbtemplate kbODBC kbOLEDB kbProvider kbVC600
Version : WINNT:6.0
Platform : winnt
Issue type : kbprb
Last Reviewed: July 21, 1999