修改BLOB
void CAdoDlg::OnBnClickedButton2()
{
CAdo ado;
ado.InitADOConn();
CString sql("SELECT * FROM t_USER WHERE LoginID= 'li'");
ado.OpenRecordset(sql);
CFile file;
if (!file.Open(_T("E:/li2.bmp"), CFile::modeRead))
return;
const int nLen = file.GetLength();
BYTE* buf = new BYTE[nLen];
file.Read(buf, nLen);
_variant_t varBlob;
varBlob.vt = VT_ARRAY | VT_UI1;
SAFEARRAY* pSafeArr = NULL;
SAFEARRAYBOUND bound;
bound.cElements = nLen;
bound.lLbound = 0;
pSafeArr = SafeArrayCreate(VT_UI1, 1, &bound);
for (long i = 0; i < nLen; ++i)
{
SafeArrayPutElement(pSafeArr, &i, buf + i);
}
delete[] buf;
varBlob.parray = pSafeArr;
ado.m_pRecordset->GetFields()->GetItem("photo")->AppendChunk(varBlob);
ado.m_pRecordset->Update();
ado.UnInitADOConn();
}
查询BLOB / 获取BLOB
void CAdoDlg::OnBnClickedButton1()
{
CAdo ado;
ado.InitADOConn();
CString sql("SELECT * FROM t_USER WHERE LoginID= 'li'");
ado.OpenRecordset(sql);
_variant_t varBlob;
varBlob = ado.m_pRecordset->GetCollect("photo");
if ((VT_ARRAY | VT_UI1) == varBlob.vt)
{
SAFEARRAY* pSafeArr = varBlob.parray;
long nLen = pSafeArr->rgsabound[0].cElements;
BYTE* buf = new BYTE[nLen];
for (long i = 0; i < nLen; ++i)
{
SafeArrayGetElement(pSafeArr, &i, buf + i);
}
CFile file;
if (file.Open(_T("E:/res.bmp"), CFile::modeCreate | CFile::modeWrite))
{
file.Write(buf, nLen);
}
delete[] buf;
}
ado.UnInitADOConn();
}
添加 BLOB
CAdo ado;
ado.InitADOConn();
try
{
ado.OpenRecordset(_T("select * from picture"));
ado.m_pRecordset->AddNew();
CFile file (strFilePath,CFile::modeRead);
DWORD fileLen = file.GetLength();
char * buffer = new char[fileLen];
file.Read(buffer,fileLen);
file.Close();
VARIANT varBlob;
varBlob.vt= VT_ARRAY|VT_UI1;
SAFEARRAY* pSafeArr;
SAFEARRAYBOUND bound;
bound.cElements = fileLen;
bound.lLbound = 0;
pSafeArr = SafeArrayCreate(VT_UI1,1,&bound);
for(long i=0; i < fileLen ; i++)
{
SafeArrayPutElement(pSafeArr, &i, buffer++);
}
varBlob.parray = pSafeArr;
ado.m_pRecordset->GetFields()->GetItem("编号")->Value = (_bstr_t)m_id;
ado.m_pRecordset->GetFields()->GetItem("姓名")->Value = (_bstr_t)m_name;
ado.m_pRecordset->GetFields()->GetItem("性别")->Value = (_bstr_t)m_sex;
ado.m_pRecordset->GetFields()->GetItem("学历")->Value = (_bstr_t)m_knowledge;
ado.m_pRecordset->GetFields()->GetItem("照片")->AppendChunk(varBlob);
ado.m_pRecordset->Update();
}
catch(...)
{
MessageBox("操作失败");
return;
}
MessageBox("操作成功.");
ado.UnInitADOConn();
获取BLOB(bmp图片)
CString sql;
sql.Format("select*from picture where 编号='%s'",m_id);
CAdo ado;
ado.InitADOConn();
ado.OpenRecordset(sql);
HBITMAP m_hBitmap;
long lDataSize = ado.m_pRecordset->GetFields()->GetItem("照片")->ActualSize;
char *buffer;
if(lDataSize > 0)
{
_variant_t varBLOB;
varBLOB = ado.m_pRecordset->GetFields()->GetItem("照片")->GetChunk(lDataSize);
if(varBLOB.vt == (VT_ARRAY | VT_UI1))
{
if(buffer = new char[lDataSize+1])
{
char *pBuf = NULL;
SafeArrayAccessData(varBLOB.parray,(void **)&pBuf);
memcpy(buffer,pBuf,lDataSize);
SafeArrayUnaccessData (varBLOB.parray);
LPSTR hDIB;
LPVOID lpDIBBits;
BITMAPFILEHEADER bmfHeader;
DWORD bmfHeaderLen;
bmfHeaderLen = sizeof(bmfHeader);
strncpy((LPSTR)&bmfHeader, (LPSTR)buffer, bmfHeaderLen);
if (bmfHeader.bfType != (*(WORD*)"BM"))
{
MessageBox("BMP文件格式不准确");
return;
}
hDIB = buffer + bmfHeaderLen;
BITMAPINFOHEADER &bmiHeader = *(LPBITMAPINFOHEADER)hDIB;
BITMAPINFO &bmInfo = *(LPBITMAPINFO)hDIB ;
lpDIBBits = (buffer) + ((BITMAPFILEHEADER *)buffer)->bfOffBits;
CClientDC dc(this);
m_hBitmap = CreateDIBitmap(dc.m_hDC,&bmiHeader,CBM_INIT,lpDIBBits,&bmInfo,DIB_RGB_COLORS);
}
}
}
if(m_hBitmap != NULL)
{
CDC* pDC = m_pictureshow.GetDC();
CRect r;
m_pictureshow.GetClientRect(&r);
CDC memdc;
memdc.CreateCompatibleDC( pDC );
memdc.SelectObject(m_hBitmap);
BITMAP bmp;
GetObject(m_hBitmap,sizeof(bmp),&bmp);
pDC->StretchBlt(r.left,r.top,r.Width(),r.Height(),&memdc,0,0,
bmp.bmWidth,bmp.bmHeight,SRCCOPY);
memdc.DeleteDC();
}
ado.UnInitADOConn();