请教大家一个问题,我使用AppendChunk函数在sqlsrv2000中插入image数据,不希望每次都是覆盖原有数据而是追加到原数据后面,请问各位大侠如何实现?
代码编译没问题,实现覆盖也没问题,主要代码如下:
VARIANT varBLOB;
SAFEARRAY *psa;
SAFEARRAYBOUND rgsabound[1];
_variant_t field;
_variant_t var;
_RecordsetPtr m_RecordsetPtr;
m_RecordsetPtr.CreateInstance("ADODB.Recordset");
sprintf(sql,"select * from my_image where id='%d'",nImageID);
m_RecordsetPtr->Open(sql,_variant_t((IDispatch*)m_ConnectionPtr,true),adOpenStatic,adLockOptimistic,adCmdText);
{
if(pInfo->pBuffer)
{    
rgsabound[0].lLbound = 0;
rgsabound[0].cElements = pInfo->nLen;
psa = SafeArrayCreate(VT_UI1, 1, rgsabound);              
for (long i = 0; i < (long)(pInfo->nLen); i++)
SafeArrayPutElement (psa, &i, pInfo->pBuffer++);          
varBLOB.vt = VT_ARRAY | VT_UI1;                    
varBLOB.parray = psa;             
m_RecordsetPtr->GetFields()->GetItem("image")->AppendChunk(varBLOB);

}
m_RecordsetPtr->Update();     

解决方案 »

  1.   

    我的程序是这样的,在客户端将一个文件分成多个包,上传到服务器上,服务器接到每个包后,将数据通过AppendChunk写入sqlserver,我不想通过缓存或者临时文件等方式,我始终觉得应该有一个和AppendChunk类似的函数或者相关的配置可以直接将数据写在image已有内容的后面,但找了一圈,没找到:(
      

  2.   

    LZ可以先取出原数据,组合后在AppendChunk
      

  3.   

    稍微该下就可以了,以下仅做参考
    if ( Buf2 ) 
    {
    rgsaBound.lLbound = 0;
    rgsaBound.cElements = fileLength;
    psa = SafeArrayCreate(VT_UI1, 1, &rgsaBound);
    for (long i = 0; i < (long)rgsaBound.cElements; i++)
    SafeArrayPutElement (psa, &i, Buf2++);
    Picture2.vt = VT_ARRAY | VT_UI1;
    Picture2.parray = psa;
    m_pRecordset->GetFields()->GetItem("image2")->AppendChunk(Picture2);
    SafeArrayDestroy(psa);
    }

    m_pRecordset->Update();
      

  4.   

    jhs1982419,你的代码和我的有什么区别吗?没看明白~~