开发者

Writing BLOB data to a SQL Server Database using ADO

I need to write a BLOB to a varbinary column in a SQL Server database. Sounds easy except that I have to do it in C++. I've been using ADO for the database operations (First question: is this the best technology to use?) So i've got the _Stream object, and a record set object created and the rest of the operation falls apart from there. If someone could provide a sample of how exactly to perform this seemingly simple operation that would be great!. My binary data is stored in a unsigned char array. Here is the codenstein that i've stitched together from what little I found on the internet:

    _RecordsetPtr updSet;
    updSet.CreateInstance(__uuidof(Recordset));
    updSet->Open("SELECT TOP 1 * FROM [BShldPackets] Order by ChunkId desc",
    _conPtr.GetInterfacePtr(), adOpenDynamic, adLockOptimistic, adCmdText);

    _StreamPtr  pStream ; //declare one first
    pStream.CreateInstance(__uuidof(Stream)); //create it after
    _variant_t varRecordset(updSet);
    //pStream->Open(varRecordset, adModeReadWrite, adOpenStreamFromRecord,  _bstr_t("n"), _bstr_t("n"));

    _variant_t varOpti开发者_StackOverflow社区onal(DISP_E_PARAMNOTFOUND,VT_ERROR);
        pStream->Open(
                        varOptional,
                        adModeUnknown,
                        adOpenStreamUnspecified,
                        _bstr_t(""),
                        _bstr_t(""));

    _variant_t bytes(_compressStreamBuffer);
    pStream->Write(_compressStreamBuffer);
    updSet.GetInterfacePtr()->Fields->GetItem("Chunk")->Value = pStream->Read(1000);
    updSet.GetInterfacePtr()->Update();

    pStream->Close();


As far as ADO being the best technology in this case ... I'm not really sure. I personally think using ADO from C++ is a painful process. But it is pretty generic if you need that. I don't have a working example of using streams to write data at that level (although, somewhat ironically, I have code that I wrote using streams at the OLE DB level. However, that increases the pain level many times).

If, though, your data is always going to be loaded entirely in memory, I think using AppendChunk would be a simpler route:

ret = updSet.GetInterfacePtr()->Fields->
               Item["Chunk"]->AppendChunk( L"some data" );
0

上一篇:

下一篇:

精彩评论

暂无评论...
验证码 换一张
取 消

最新问答

问答排行榜