我想实现将一个EXCEL或WORD文件转换成二进制文件然后再存入SQL的varBinary字段中最后读取varBinary转换成EXCEL或WORD不知从何下手
如何将EXCEL或WORD文件转换成二进制文件啊
如何将EXCEL或WORD文件转换成二进制文件啊
解决方案 »
- vs2005+opencv2.1配置问题
- sizeof
- 有好几千个客户端,每隔一个小时往服务端发一个包,如何设计好一点
- 谁有子视图左边为QQ抽屉菜单,右为datagrid控件这样的多文档程序,拜托给给传一个
- 如何取得一个既包含单字节字符又包含双字节字符的字符串的字符个数?
- LPARAM与CString或者char能否相互转化, 急,在线等
- 用CSocket接收2k的UDP包时出错,请问如何改正?
- 请问,如何插入内容
- 用ado循环取各clistctrl多行数据并插入sqlserver数据库问题
- MFC框架构建,求指教
- 如何让MFC窗体(有背景贴图,按钮贴图)能适应不同的DPI环境?
- 今天试着用List control怎么一点也没反应啊、、、、、、
fread
比如用CFile 读取
CFile file ;
if(!file.Open("d:\\1.xls",CFile::modeReadWrite|CFile::typeBinary,NULL))
{
AfxMessageBox("打开文件失败!") ;
return ;
}
char *pBuffer = new char[file.GetLength() + 1] ;
pBuffer[file.GetLength()] = 0 ;
file.Seek(0, CFile::begin) ;
file.Read(pBuffer,file.GetLength()) ;
file.Close() ;
读完了把什么保存到SQL的varBinary字段中反过来又怎么把varBinary字段中的内容转换成EXCEL或WORD文件?
中的pBuffer写到数据库??
我现在直接读然后不保存SQL直接写到EXCEL中,最后写入的那个打开内容是空的啊
CFile file ;
if(!file.Open("d:\\1.xls",CFile::modeReadWrite|CFile::typeBinary,NULL))
{
AfxMessageBox("打开文件失败!") ;
return ;
}
char *pBuffer = new char[file.GetLength() + 1] ;
pBuffer[file.GetLength()] = 0 ;
file.Seek(0, CFile::begin) ;
file.Read(pBuffer,file.GetLength()) ;
file.Close() ; file.Open("d:\\2.xls",CFile::modeCreate|CFile::modeWrite|CFile::typeBinary) ;
file.Write(pBuffer,file.GetLength()) ;
file.Close();
//1.xls和2.xls内容不一样,2.xls是空的
//为什么啊?
因为你写入的长度是0。先把第一个文件的长度保存下来: CFile file ;
if(!file.Open("d:\\1.xls",CFile::modeRead,NULL))
{
AfxMessageBox("打开文件失败!") ;
return ;
}
DWORD nFileSize = file.GetLength();
char *pBuffer = new char[nFileSize] ;
DWORD nReadLen = file.Read(pBuffer, nFileSize) ;
file.Close() ; file.Open("d:\\2.xls",CFile::modeCreate|CFile::modeWrite) ;
file.Write(pBuffer, nReadLen);
file.Close();
应该写入到哪种类型的字段啊??
CFile file ;
if(!file.Open("d:\\1.xls",CFile::modeRead,NULL))
{
AfxMessageBox("打开文件失败!") ;
return ;
}
DWORD nFileSize = file.GetLength();
char *pBuffer = new char[nFileSize] ;
DWORD nReadLen = file.Read(pBuffer, nFileSize) ;
file.Close() ; ........//连接SQL成功
try
{
sql.Format("INSERT INTO FLOW (item,longs) VALUES ('%s',%d)",pBuffer,nReadLen);
m_pConnection->Execute((_bstr_t)sql,NULL,adCmdText);
}
catch(_com_error e)
{
AfxMessageBox(errormessage);
return ;
}为什么我把读到的pBuffer和nReadLen,写入到SQL的item和longs字段老是出错,item类型为nvarchar,longs字段为int
sql.Format("INSERT INTO FLOW (item,longs) VALUES (\'%s\',%d)",pBuffer,nReadLen);
........//连接数据库
.......//得到记录集,确定记录集中有数据
/*然后准备图片数据*/
VARIANT vImg;
char *pBuff,*pBuffFile;
//...
/*从文件读BMP图像*/
CFile f;
DWORD dwSize;
if(f.Open("c:\\maoshi.gif",CFile::modeRead |CFile::modeNoTruncate ) && (dwSize=f.GetLength ())>10)//打开文件
{
pBuffFile=new char[dwSize];
f.Read (pBuffFile,dwSize);//读出来
VariantInit(&vImg);//初始化变量
vImg.vt =VT_ARRAY | VT_UI1;//设置数据类型
SAFEARRAYBOUND rgsabound[1];//创建SAFEARRAY必须的
rgsabound[0].lLbound = 0;
rgsabound[0].cElements = dwSize;//数据大小
vImg.parray = SafeArrayCreate(VT_UI1, 1, rgsabound); ///创建SAFEARRAY对象
SafeArrayAccessData(vImg.parray,(void **)&pBuff);//获取SAFEARRAY的缓冲区指针
memcpy(pBuff,pBuffFile,dwSize);//把图片数据COPY进去
::SafeArrayUnaccessData (vImg.parray );//释放SAFEARRAY的缓冲区指针
//到这里已经把图片封装进了vImg了
//然后把vImg存到数据库里面去
//pRst->->MoveLast ();//根据定需要定位记录
pRst->GetFields()->GetItem("IMG_ITEM")->AppendChunk(vImg);//把vImg放到recordset的IMG_字段,这个字段是SQLSERVER的IMAGE数据类型
pRst->Update ();//更新
pRst->Close ();//关闭Recordset
}
pRst->GetFields()->GetItem("IMG_ITEM")->AppendChunk(vImg);//总是运行到这里的时候出RUNTIME ERROR错误IMG_ITEM字段类型为image是不是要安装什么东西才能存储还是其他的问题啊~~
用INSERT pBuffer这个方法插入应该是不行了、因为SQL语句长度好像有限制~
VC/MFC->数据库 那我也发了一个100分的帖,只是拿里人气少
所以又发到这里来了~~其实我最终的目的就是
实现把EXCEL或WORD保存到SQL里,然后反向能读取出EXCEL或WORD随便什么方法都行只要能实现这个功能
ADO
http://www.vckbase.com/document/viewdoc/?id=252