数据库读取和存储大型数据(图片、音视频文件)的函数封装

来源:互联网 发布:扫描软件 到一页 编辑:程序博客网 时间:2024/05/17 08:43
LONG ADORecordset::GetChunk( const CString& strIndex, BYTE* buf /*= NULL*/, LONG len /*= 0*/) const{ //从数据库中某字段取数据ASSERT(m_pRecordset != NULL);LONG ret = 0;try{if ( buf == NULL || len == 0 ){ret = m_pRecordset->GetFields()->GetItem( _variant_t(strIndex) )->ActualSize;}else{_variant_t varBLOB;varBLOB = m_pRecordset->GetFields()->GetItem( _variant_t(strIndex) )->GetChunk(len);if(varBLOB.vt == (VT_ARRAY | VT_UI1)) ///判断数据类型是否正{char *pBuf = NULL;SafeArrayAccessData(varBLOB.parray,(void **)&pBuf); memcpy( buf, pBuf, len);//得到指向数据的指针 /*****在这里我们可以对pBuf中的数据进行处理*****/SafeArrayUnaccessData (varBLOB.parray);ret = len;}}}catch (_com_error e){throw new ADOException(e);}return ret;}void ADORecordset::SetChunk( const CString& strIndex, BYTE* buf, int len){//将数据存入数据库中某字段ASSERT(m_pRecordset != NULL);if ( NULL == buf || len <= 0 ) return;try{VARIANT varBLOB;SAFEARRAY *psa;SAFEARRAYBOUND rgsabound[1];rgsabound[0].lLbound = 0;rgsabound[0].cElements = len;psa = SafeArrayCreate(VT_UI1, 1, rgsabound); ///创建SAFEARRAY对象for (long i = 0; i < (long)len; i++)SafeArrayPutElement (psa, &i, buf++); ///将pBuf指向的二进制数据保存到SAFEARRAY对象psa中 varBLOB.vt = VT_ARRAY | VT_UI1;///将varBLOB的类型设置为BYTE类型的数组varBLOB.parray = psa; ///为varBLOB变量赋值 m_pRecordset->GetFields()->GetItem( _variant_t(strIndex) )->AppendChunk(varBLOB); ///加入BLOB类型的数据SafeArrayDestroy(psa);}catch (_com_error e){throw new ADOException(e);}}

 
原创粉丝点击