怎么样从数据库中取出二进制数据到ADO的Stream对象中来..

解决方案 »

  1.   

    #import "c:\program files\common files\system\ado\msado15.dll" no_namespace rename("EOF","adoEOF")
    int main(int argc, char* argv[])
    {
    printf("This sample shows you how to access BLOB via ADO and store it as file"
    "The second field of the database is BLOB\n"
    "If it works, it is writen by masterz,\n"
    "otherwise I don't know who write it\n");
    CoInitialize(NULL);
    try
    {
    _ConnectionPtr pConn("ADODB.Connection");
    _RecordsetPtr  pRst("ADODB.Recordset");
    _variant_t varBLOB;
    pConn->Open(_bstr_t("Driver={Microsoft Access Driver (*.mdb)};DBQ=GetChunk.mdb"),"","",adConnectUnspecified);
    pRst->Open(_bstr_t("BlobTable"),_variant_t((IDispatch *) pConn, true),
    adOpenKeyset, adLockOptimistic, adCmdTable);
    pRst->MoveFirst();
    //long lDataLength = pRst->Fields->Item[1L]->ActualSize;
    //varBLOB = pRst->Fields->Item[1L]->GetChunk(lDataLength);
    _StreamPtr stream;
    stream.CreateInstance("ADODB.Stream");
    _variant_t varOptional(DISP_E_PARAMNOTFOUND,VT_ERROR); 
    stream->raw_Open(varOptional, adModeUnknown, adOpenStreamUnspecified,NULL,NULL);
    stream->put_Type(adTypeBinary);
    stream->Write(pRst->GetFields()->GetItem(_variant_t((long)1))->GetValue());
    stream->SaveToFile("test.txt",adSaveCreateOverWrite);
    printf("save stream to file finished\n");
    stream->Close();
    pRst->Close();
    pConn->Close();
    }
    catch (_com_error &e)
    {
    printf("Description = '%s'\n", (char*) e.Description());
    }
    ::CoUninitialize();
    return 0;
    }