请教大家一个问题,我使用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();
代码编译没问题,实现覆盖也没问题,主要代码如下:
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();
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();