我在VC6使用ADO连接SQL SERVER数据库,
我要在这个数据库的一个表上建立一个字段来存储一幅图片(暂时为BMP图片).
我现在有一个BMP文件,
我应该怎么做,
才可以将BMP文件的内容写入这个字段,
并且可以从这个字段读出BMP文件的内容并且显示出该图片?
在VC上实现.........
我要在这个数据库的一个表上建立一个字段来存储一幅图片(暂时为BMP图片).
我现在有一个BMP文件,
我应该怎么做,
才可以将BMP文件的内容写入这个字段,
并且可以从这个字段读出BMP文件的内容并且显示出该图片?
在VC上实现.........
解决方案 »
- 见鬼了
- 如何实现一个字符串整体按角度显示,但是每个字的角度都是正的?
- 如何获取锁定计算机事件
- 北京大正语言知识处理研究院
- 打算从VB专到VC。从那入手啊!该做些什么呢,各位大虾米出出注意啊!
- 请问如果要在C#中传递字符串给VC ATL COM 函数,COM函数如何定义参数 在线等
- 连接一个DX8工程时出现错误error LNK2001: unresolved external symbol _Direct3DCreate8@4,是不是我的Dx8 SDK不全?库里有147个文件,
- VC7 下,怎么关闭强制类型转换 以后 的警告
- 急!!,我VC的一个库文件坏了!
- DECLARE_SERIAL(类名) 这句话是什么意思?一般是要在什么时候用?有什么用处?
- 获取网络流量的API函数有哪些??
- 如何在文件打开的时候重命名呢,好烦,望高手帮忙!!!!!!!!!!!!!!!!!!!!!
写入:
if( !file.Open( sGFile, CFile::modeRead) )
return "文件操作失败!";
m_nFileLen = file.GetLength();
m_pBMPBuffer = new char[m_nFileLen + 1];
if(!m_pBMPBuffer)
return "文件操作失败!";
if(file.ReadHuge(m_pBMPBuffer,m_nFileLen) != m_nFileLen)
{
delete[] m_pBMPBuffer;
return "文件操作失败!";
} file.Close();
pBuf = m_pBMPBuffer;
if(pBuf)
{
rgsabound[0].lLbound = 0;
rgsabound[0].cElements = m_nFileLen;
psa = SafeArrayCreate(VT_UI1, 1, rgsabound);
for (long i = 0; i < (long)m_nFileLen; i++)
SafeArrayPutElement (psa, &i, pBuf++);
varBLOB.vt = VT_ARRAY | VT_UI1;
varBLOB.parray = psa;
m_pRecordset->GetFields()->GetItem("PM_DIREC")->AppendChunk(varBLOB);
}
else
{
delete[] m_pBMPBuffer;
return "文件操作失败!";
}
delete[] m_pBMPBuffer;
}====================
读取:
long lDataSize = m_pRecordset->GetFields()->GetItem("PM_FLOW")->ActualSize;
if(lDataSize > 0)
{
_variant_t varBLOB;
varBLOB = m_pRecordset->GetFields()->GetItem("PM_FLOW")->GetChunk(lDataSize);
if(varBLOB.vt == (VT_ARRAY | VT_UI1))
{
if(m_pBMPBuffer = new char[lDataSize+1]) ///重新分配必要的存储空间
{
char *pBuf = NULL;
SafeArrayAccessData(varBLOB.parray,(void **)&pBuf);
memcpy(m_pBMPBuffer,pBuf,lDataSize); ///复制数据到缓冲区m_pBMPBuffer
SafeArrayUnaccessData (varBLOB.parray);
m_nFileLen = lDataSize;
CFile file;
TCHAR lpszFileName[MAX_PATH+1];
::GetModuleFileName(NULL,lpszFileName,MAX_PATH+1);
CString module = lpszFileName;
int index = module.ReverseFind('\\');
module = module.Left(index+1);
if(!file.Open(module+"\\temp.file", CFile::modeWrite|CFile::modeCreate))
{
sItem.nItemID=0;
delete[] m_pBMPBuffer;
return sItem;
}
sItem.sSaveFile=module+"\\temp.file" ;
file.WriteHuge(m_pBMPBuffer,m_nFileLen);
file.Close();
delete[] m_pBMPBuffer;
}
}
}
Using BLOBs