从sql数据库中取image类型数据并显示的有关问题

从sql数据库中取image类型数据并显示的问题
我想把sql数据库中的image类型数据取出来,并显示在控件中,以下是找的一段代码,可以取出来但无法显示,望各位帮忙
_StreamPtr   pStm;      
pStm.CreateInstance( "ADODB.Stream ");      
variant_t   varOptional(DISP_E_PARAMNOTFOUND,VT_ERROR);      
pStm-> PutType(adTypeBinary);//类型为二进制      
  //得到字段内容的大小      
//           long       lDataSize       =       m_pRecordset-> GetFields()-> GetItem( "photo ")-> ActualSize;      
//m_pRecordset为一个打开的纪录集对象,含有photo这个blob字段      
pStm-> Open(varOptional,adModeUnknown,adOpenStreamUnspecified,_bstr_t(),_bstr_t());                                          
//打开pStm      
pStm-> Write(_variant_t(m_pRecordset-> GetFields()-> GetItem( "receiptPath ")-> Value));      
//把photo字段的内容写入pStm,保存到磁盘,可以实现
//pStm-> SaveToFile( "d:\\publogo.jpg ",adSaveCreateOverWrite);      
//以下是将图片显示出来的代码,有问题,不知道怎么改
//variant_t   varBLOB=pStm-> Read(adReadAll);  
HGLOBAL   hGlobal=GlobalAlloc(GMEM_MOVEABLE,pStm-> GetSize());              
LPVOID   pvData=NULL;              
IStream   *ps;      
if(hGlobal!=NULL)              
{      
_variant_t   varBLOB;
if((pvData=GlobalLock(hGlobal))!=NULL)              
{              
char   *m_pBMPBuffer=new   char[pStm-> GetSize()+1];//分配必要的存储空间      
char   *pBuf=NULL;      
SafeArrayAccessData(varBLOB.parray,(void   **)&pBuf);      
memcpy(pvData,pBuf,pStm-> GetSize());       //复制数据到缓冲区   m_pBMPBuffer      
SafeArrayUnaccessData(varBLOB.parray);      
GlobalUnlock(hGlobal);      
CreateStreamOnHGlobal(hGlobal,TRUE,&ps);      
}      
}      
       
IPicture   *pPic;          
if(SUCCEEDED(OleLoadPicture(ps,pStm-> GetSize(),TRUE,IID_IPicture,(LPVOID*)&pPic)))          
{          
       
OLE_XSIZE_HIMETRIC       hmWidth;              
OLE_YSIZE_HIMETRIC       hmHeight;              
pPic-> get_Width(&hmWidth);              
pPic-> get_Height(&hmHeight);              
double   fX,fY;              
CDC   *pDC=GetDlgItem(IDC_PICTURE)-> GetDC();///这里是获取控件DC      
fX=(double)pDC-> GetDeviceCaps(HORZRES)*(double)hmWidth/((double)pDC-> GetDeviceCaps(HORZSIZE)*100.0);              
fY=(double)pDC-> GetDeviceCaps(VERTRES)*(double)hmHeight/((double)pDC-> GetDeviceCaps(VERTSIZE)*100.0);              
if(FAILED(pPic-> Render(*pDC,0,0,(DWORD)fX,(DWORD)fY,0,hmHeight,hmWidth,-hmHeight,NULL)))