long lDataSize=Mycs.m_pRecordset->GetFields()->GetItem("photo")->ActualSize;
//这里lDataSize的值是13457
if (lDataSize>0)
{
_variant_t varBLOB = Mycs.m_pRecordset->GetFields()->GetItem("photo")->GetChunk(lDataSize);
if(varBLOB.vt == (VT_ARRAY | VT_UI1))
{
char *pBuffer=new char[lDataSize+1];
if (!pBuffer)
{
::MessageBox(NULL,"读取数据出错,操作即将终止!","警告",MB_ICONWARNING);
Mycs.m_pRecordset->Close();
Mycs.m_pConnection->Close();
return;
}
char *pBuf = NULL;
SafeArrayAccessData(varBLOB.parray,(void **)&pBuf);
//这里pBuf的长度是4,怎么回事?按道理应该等于lDataSize的
memcpy(pBuffer,pBuf,lDataSize);
SafeArrayUnaccessData (varBLOB.parray);
//这里lDataSize的值是13457
if (lDataSize>0)
{
_variant_t varBLOB = Mycs.m_pRecordset->GetFields()->GetItem("photo")->GetChunk(lDataSize);
if(varBLOB.vt == (VT_ARRAY | VT_UI1))
{
char *pBuffer=new char[lDataSize+1];
if (!pBuffer)
{
::MessageBox(NULL,"读取数据出错,操作即将终止!","警告",MB_ICONWARNING);
Mycs.m_pRecordset->Close();
Mycs.m_pConnection->Close();
return;
}
char *pBuf = NULL;
SafeArrayAccessData(varBLOB.parray,(void **)&pBuf);
//这里pBuf的长度是4,怎么回事?按道理应该等于lDataSize的
memcpy(pBuffer,pBuf,lDataSize);
SafeArrayUnaccessData (varBLOB.parray);
sizeof等于4
但是我是用的strlen不应该等于4
但是这个photo字段IMAGE类型读取错误
我知道
sizeof(pBuffer)==4
但是我用的strlen(pBuffer)
而且我用MessageBox(pBuffer)看了
显示的也是四个字符
some[0]=0x30;
some[4]=0;
int iiiu=strlen(some);
some[4]=0x30;
some[5]=0;
iiiu=strlen(some);
strlen()碰到0(NULL)字符就认为是字符串结束了.而image就long binary字段,可以含有任何字符可能刚好是第5个byte是0;
以前你给分都是200分忽然给80分以为你没分了哈...
我的读doc第9个byte是00.
blob不一定非得32767就分段处理吧.我用vc处理过500k的doc.pb处理过2m的dat.好像没出什么错...
是JPG,我再去试一试
顺便再问个问题我把JPG图片往数据库写
一张13.3K的图片数据正常
当图片达到30K的时候就出错了TNND,估计又是指针出错
不会真的是要分段处理吧?