程序代码如下:
long lDataSize;
char *pBuf = NULL;
CFile file("F:\\Des.jpg", CFile::modeCreate | CFile::modeWrite);
_RecordsetPtr m_Recordset;
m_Recordset.CreateInstance(__uuidof(Recordset));
m_Recordset->Open("Select * From VehiclePicture", m_Connection.GetInterfacePtr(),adOpenKeyset, adLockOptimistic, adCmdText);
if(VARIANT_FALSE == m_Recordset->adoBof && VARIANT_FALSE == m_Recordset->adoEof)
{
m_Recordset->MoveFirst();
lDataSize = m_Recordset->GetFields()->GetItem("photo")->ActualSize;///得到数据的长度
if(lDataSize > 0)
{
_variant_t varBLOB;
varBLOB = m_Recordset->GetFields()->GetItem("photo")->GetChunk(lDataSize);
if(varBLOB.vt == (VT_ARRAY | VT_UI1)) ///判断数据类型是否正确
{
SafeArrayAccessData(varBLOB.parray,(void **)&pBuf); ///得到指向数据的指针
SafeArrayUnaccessData(varBLOB.parray);
}
} file.WriteHuge((LPVOID)pBuf,lDataSize);
file.Close();
}为什么我打开硬盘F:\\Des.jpg 发现文件大小跟我向数据库中写的Src.jpg大小完全一样,但就是在硬盘上显示个叉叉,显示不出来;我将Src.jpg写入数据库字段中的程序完全正确,并且我测试过写到数据中数据的有效性,通过数据库邦定字段能显示出来;为什么我从数据库中再读出来,写到硬盘上就显示不出来呢,我将Des.jgp加载到VB中的Picture控件提示无效句柄,请问如何解决.....
long lDataSize;
char *pBuf = NULL;
CFile file("F:\\Des.jpg", CFile::modeCreate | CFile::modeWrite);
_RecordsetPtr m_Recordset;
m_Recordset.CreateInstance(__uuidof(Recordset));
m_Recordset->Open("Select * From VehiclePicture", m_Connection.GetInterfacePtr(),adOpenKeyset, adLockOptimistic, adCmdText);
if(VARIANT_FALSE == m_Recordset->adoBof && VARIANT_FALSE == m_Recordset->adoEof)
{
m_Recordset->MoveFirst();
lDataSize = m_Recordset->GetFields()->GetItem("photo")->ActualSize;///得到数据的长度
if(lDataSize > 0)
{
_variant_t varBLOB;
varBLOB = m_Recordset->GetFields()->GetItem("photo")->GetChunk(lDataSize);
if(varBLOB.vt == (VT_ARRAY | VT_UI1)) ///判断数据类型是否正确
{
SafeArrayAccessData(varBLOB.parray,(void **)&pBuf); ///得到指向数据的指针
SafeArrayUnaccessData(varBLOB.parray);
}
} file.WriteHuge((LPVOID)pBuf,lDataSize);
file.Close();
}为什么我打开硬盘F:\\Des.jpg 发现文件大小跟我向数据库中写的Src.jpg大小完全一样,但就是在硬盘上显示个叉叉,显示不出来;我将Src.jpg写入数据库字段中的程序完全正确,并且我测试过写到数据中数据的有效性,通过数据库邦定字段能显示出来;为什么我从数据库中再读出来,写到硬盘上就显示不出来呢,我将Des.jgp加载到VB中的Picture控件提示无效句柄,请问如何解决.....
你的pBuf是空的!改为char *pBuf =“F:\\Des.jpg”;就可以了。