Добрый день.
Используется MS ADO 2.8, Microsoft OLE DB Provider for SQL Server вместе с MS SQL Server 2008.
При работе с бинарными данными посредством AppendChunk весь блоб целиком должен быть сформирован до вызова Update на клиентской стороне даже при использовании серверных курсоров. Поскольку блобы достаточно большие, хочется при работе с ними не хранить их в памяти целиком.
Вопрос:
1) Можно ли при помощи ado stream'а работать с блобом, не загружая его целиком в память клиента (используя смещение внутри блоба)?
2) Если да, то как связать stream с record'ом? Сейчас сделано так:
ADODB::_RecordPtr pRecord;
TESTHR(pRecord.CreateInstance(__uuidof(ADODB::Record)));
_bstr_t strSQL = "SELECT ID, Data from tabData";
pRecord->Open(strSQL, _variant_t((IDispatch*) pConn),
ADODB::adModeReadWrite,
ADODB::adFailIfNotExists,
ADODB::adOpenExecuteCommand,
"", "");
ADODB::_StreamPtr pStream;
TESTHR(pStream.CreateInstance(__uuidof(ADODB::Stream)));
pStream->Type = ADODB::adTypeBinary;
pStream->Open(_variant_t((IDispatch*) pRecord),
ADODB::adModeUnknown,
ADODB::adOpenStreamFromRecord,
"", "");
Запись открывается, на открытии потока ловим DB_E_BADCOLUMNID. В чем может быть дело?
Спасибо.