Реферат: Работа с объектами большого объема в MS SQL и ADO
IErrorInfo* ef = 0; GetErrorInfo(0,&ef); \
_com_raise_error(_hr,ef);}}while(false)
void UploadPicture2DB(PCWSTR szPath)
{
try{
CComVariant vtMissing(DISP_E_PARAMNOTFOUND,VT_ERROR);
//Загружаем картинку из файла
TESTHR(OleLoadPicturePath(szPath,NULL,NULL,0,IID_IPicture,(void**)&pic));
CComPtr<ADOStream> stream;
TESTHR(stream.CoCreateInstance(L"ADODB.Stream"));
TESTHR(stream->put_Type(adTypeBinary));
TESTHR(stream->Open(vtMissing));
CComQIPtr<IStream> strm(stream);
CComQIPtr<IPersistStream> ps(pic);
//Сохраняем картинку в объект ADODB.Stream
TESTHR(ps->Save(strm,TRUE));
CComPtr<ADORecordset> rs;
TESTHR(rs.CoCreateInstance(L"ADODB.Recordset"));
TESTHR(rs->Open(CComVariant(L"blob_test"),CComVariant(conn),adOpenStatic,
adLockOptimistic,adCmdTable));
//Добавляем новую пустую запись
TESTHR(rs->AddNew(vtMissing,vtMissing));
CComPtr<ADOFields> flds;
TESTHR(rs->get_Fields(&flds));
CComPtr<ADOField> fld;
TESTHR(flds->get_Item(CComVariant(L"img"),&fld));
TESTHR(stream->put_Position(0));
//Заливаем содержимое Stream-а в поле img
CComVariant v;