如何把一个文件已二进制流的方式存储到数据库的一个字段中,以及如何从数据库的对应的字段导出这个文件
解决方案 »
- vs2008如何注册Activex控件及Edit控件的使用?
- 如何在ATL控件中调用ActiveX控件
- 如何读取D盘的起始扇区地址和结束扇区地址
- 在单文档中加了一个dialogbar,在此dialogbar上加了一个CSilderCtrl控件,请问点击CSilderCtrl控件的消息发送到哪里?怎样响应鼠标拖动的消息?
- 怎么实现程序对另一个应用程序的启动和关闭?
- 一个新手对于API,socket和MFC之间关系的困惑
- 关于读XML字串的一个小问题。
- 请教高手:如何取得某进程弹出的模态对话框的句柄?
- CRecordset问题.那个设置绝对位置的方法,在什么条件下不好使?
- MFC 如何调用资源图标作为 快捷方式的图标?
- 如何可以反编译Lib文件?
- VC Socket编HTTP服务器程序问题
给你一个例子,这个是把jpg文件存入数据库的例子,同样也可以存入你的想存的文件
{
// TODO: Add extra validation here
UpdateData(false);
_variant_t Strql; if(adStateOpen==theApp.ADOConnAccess->State)
{
Strql="Select DllFile,DllName from TaskPDF where ProductionName='"+m_production+"'";
theApp.ADOExecute(theApp.ADOConnAccess,theApp.m_pADOSet,Strql);
}
long lDataLength = theApp.m_pADOSet->Fields->GetItem("DllFile")->ActualSize;
VARIANT varBLOB=theApp.m_pADOSet->GetFields()->GetItem("DllFile")->GetChunk(lDataLength);
if(varBLOB.vt == (VT_ARRAY | VT_UI1))
{
BYTE *pBuf = NULL;
pBuf = (BYTE*)GlobalAlloc(GMEM_FIXED,lDataLength);
HRESULT hr; hr = SafeArrayAccessData(varBLOB.parray,(void **)pBuf);
//Build a File in Windows Temp Directory
//char tmpPath[_MAX_PATH+1];
//GetTempPath(_MAX_PATH,tmpPath);
CString strAppPath("");
::GetModuleFileName(NULL, strAppPath.GetBuffer(MAX_PATH), MAX_PATH);
strAppPath.ReleaseBuffer(-1);
strAppPath = strAppPath.Left(strAppPath.ReverseFind('\\') + 1);
strAppPath += StrFileName;
CFile outFile(strAppPath,CFile::modeCreate|CFile::modeWrite);
LPSTR buffer = (LPSTR)GlobalLock((HGLOBAL)pBuf);
outFile.WriteHuge(buffer,lDataLength);
GlobalUnlock((HGLOBAL)pBuf);
outFile.Close();
SafeArrayUnaccessData (varBLOB.parray);
}
}
程序执行到这一行,取出的为空值
VARIANT varBLOB=theApp.m_pADOSet->GetFields()->GetItem("DllFile")->GetChunk
为什么???请高手指点,还可以加分
这一行取的文件长度都是正确的,生成的DLL文件变成了不是WIN32文件
这一行取的文件长度都是正确的,生成的DLL文件变成了不是WIN32文件,存储文件在我的一个VB的程序中已经存储进取了,我们的客户端是用VC写的。