请问如何从SQl server 表中所存储的图片取出来写到文件中?
在一个表中存储图片,字段定义为image,
用Ado Recordset的获取实际存储的图片的长度,如下
long nSize = pRs->GetFields()->GetItem("Photo")->ActualSize;
nSize总是为0.
请问如何从SQl server 表中所存储的图片取出来写到文件中?
代码如下:
CString szPhoto;
szPhoto.Format("\\Photo\\%s.bmp", m_szCode);
_RecordsetPtr pRs;
if(FAILED(m_db->GetPhoto(pRs, m_szCode)))
return FALSE;
if(pRs->ADOEOF && pRs->BOF)
return FALSE;
long nSize = pRs->GetFields()->GetItem("Photo")->ActualSize;
//这里取到的nSize总是为0,而实际是存储有数据的. Photo是Image类型.
if(nSize>0)
{
CFile f;
CFileException e;
if(f.Open(szPhoto, CFile::modeCreate | CFile::typeBinary, &e))
{
_variant_t varBlod;
varBlod = pRs->GetFields()->GetItem("Photo")->GetChunk(nSize);
if(varBlod.vt == (VT_UI1 | VT_ARRAY))
{
BYTE *buff = new BYTE[nSize+1];
if(buff)
{
char *p = NULL;
SafeArrayAccessData(varBlod.parray, (void**)&p);
memcpy(buff, p, nSize);
SafeArrayUnaccessData(varBlod.parray );
f.WriteHuge(buff, nSize);
delete[] buff;
m_CurEmployee.m_szPhotoFile = szPhoto;
}
}
f.Close();
}
}