请问用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。请各位高手说说有可能会是什么问题?
我定义了一个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。请各位高手说说有可能会是什么问题?
(其它操作看不出问题)
我是这样用的
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();
}
}