请问用appendchunk写入数据的字段类型能否为char?
我定义了一个char类型的字段,
但是调用appendchunk老出错,而且出错提示为未知错误。我使用的是一个封装了ado里appendchunk方法的函数BOOL CADORecordset::AppendChunk(LPCTSTR lpFieldName, LPVOID lpData, UINT nBytes)
{
FieldPtr pField = m_pRecordset->Fields->GetItem(lpFieldName);
         HRESULT hr;
_variant_t varChunk;
long lngOffset = 0;
UCHAR chData;
SAFEARRAY FAR *psa = NULL;
SAFEARRAYBOUND rgsabound[1]; try
{
//Create a safe array to store the array of BYTES 
rgsabound[0].lLbound = 0;
rgsabound[0].cElements = nBytes;
psa = SafeArrayCreate(VT_UI1,1,rgsabound); while(lngOffset < (long)nBytes)
{
         chData = ((UCHAR*)lpData)[lngOffset];
         hr = SafeArrayPutElement(psa, &lngOffset, &chData); if(FAILED(hr))
return FALSE;

lngOffset++;
}
lngOffset = 0; //Assign the Safe array  to a variant. 
varChunk.vt = VT_ARRAY|VT_UI1;
varChunk.parray = psa; hr = pField->AppendChunk(varChunk); if(SUCCEEDED(hr)) return TRUE;
}
catch(_com_error &e)
{
dump_com_error(e);
return FALSE;
} return FALSE;
}调试时发现,一直到调用pField->AppendChunk(varChunk)前都能正常执行,数据也转换成了_variant_t。请各位高手说说有可能会是什么问题?

解决方案 »

  1.   

    会不会是字段类型,字段名称有问题?
    (其它操作看不出问题)
    我是这样用的
    void CAdoBlob::SetBlob(BYTE * pBuf, long nSize)
    {
    VARIANT   varBLOB;
    SAFEARRAY  * psa;
    SAFEARRAYBOUND rgsabound[1];

    if(pBuf)
    {    
    rgsabound[0].lLbound = 0;
    rgsabound[0].cElements = nSize;
    psa = SafeArrayCreate(VT_UI1, 1, rgsabound);
    for(long i = 0; i < (long)nSize; i++)
    SafeArrayPutElement (psa, &i, pBuf++);
    varBLOB.vt = VT_ARRAY | VT_UI1;
    varBLOB.parray = psa;

    m_pRs->GetFields()->GetItem("F_DATA")->AppendChunk(varBLOB);//F_DATA为字段名称
    m_pRs->Update();
    }
    }