MFC+ODBC+SQLServer存储过程,保存图片到数据库某表中的Image字段 如题,我已经查了CSDN和baidu,没有找到,有能解决的吗? 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 楼主认为难点在什么地方呢?图片存储?http://www.codeproject.com/database/ADOImageDB.asp这篇文章不知是否有帮助。 ADO方式和ODBC应该有区别吧,网上查下全是ADO的,在MFC中用什么类去处理保存图片呢?谢谢 看看这篇文章,是否能解决你的问题?http://www.cnsdn.com.cn/blog/article.asp?id=1019 不太明白楼主的真正意图.不知以下是不是你想要的可以考虑使用现成的成熟控件:柯达图象处理控件,包括imgadmin.ocx,imgedit.ocx,imgscan.ocx.对于图象可以考虑以上控件来保存,然后以二进制文件存入.直接二进制流读取图象,然后存入数据库相应blog型字段下,从数据库读图象时候也要用到相应反方向的处理. 其实我原来的想法是把图片通过MFC的界面保存到数据库中,在用的界面再通过ODBC从数据库中读出来显示,举个无图片的例子:1、写一SQL存储过程,内容是向表1中插入一条数据。2、MFC程序通过ODBC数据源与SQL相连接。3、在MFC中的调用存储过程。就这样,只不过现在是把数据换成了图片,我就没找到过这样的答案。必须要用什么控件吗? 当应用存储大量图片的时候,通常根据图象的类型用途等抽取出其索引信息,并把图片本身作为一个资源,这样一个单纯的图片就分为了索引和资源两种信息。这样,对于存储大量图片就有了两种比较流行的处理方式: 一、将图像索引存储到数据库中,并且把图象资源以BLOB类型存储到数据库中。 二、将图像索引存储到数据库中,把图像资源存到文件系统中,并把图象在文件系统中的path存储到数据库中。 因为数据库的强项是存储和管理索引,文件系统的强项是存储和管理文件,为了达到最佳性能,需要中和文件系统和数据库的性能,决定最佳的方式,索引对于第一种处理方式,较适合有海量,极琐碎文件的情形,而第二中处理方式,较适合大文件,海量的情形。以下代码是我从别出贴过来的希望对你有用,更多的东西希望你自己去揣摩。 void CMytest::OnAdd() { //TODO:Add your control notification handler code here m_pSet->AddNew(); UpdateData(TRUE); CFile fileword; CFileStatus fileStatus; CString fileLocate; static char BASED_CODE szFilter[]="image Files(.jpg)|.bmp||"; CFileDialog dlg(TRUE,NULL,NULL,0,NULL,this); if(dlg.DoModal()==IDOK) fileLocate=dlg.GetPathName(); else fileLocate=""; if(fileLocate=="") AfxMessageBox("you don't choise file"); else { fileword.Open(fileLocate,CFile::modeRead); fileword.GetStatus(fileStatus); m_pSet->m_REPORT.m_hData=GlobalAlloc(GPTR,fileStatus.m_size); HGLOBAL hGlobal=GlobalAlloc(GPTR,fileStatus.m_size); m_pSet->SetFieldDirty(&m_pSet->m_REPORT); m_pSet->SetFieldNull(&m_pSet->m_REPORT,FALSE); m_pSet->Update(); GlobalUnlock(hGlobal); } } 以上代码是对于第一种处理方式,对于第二种处理方式,实现起来较为简单。对于这方面的开发拥有领先技术和绝对优势的企业有国内的信雅达公司,以及国外的IBM公司。 请问8#的高手,我感觉图片的数据没有用到啊,即fileword没有传进去啊?不知道我说的对不对?望指教! CListCtrl美化 谁帮忙看下这个错误该怎么解决?在线等... 怎么才能得到listbox下面选种的字符串呢?~?~?~在线等~~谢谢 调查一下程序员的健康状况!!!!!兄弟们都进来关心一下自己!!!! 在控制台程序中使用MFC的问题 用什么方法在程序里实现保存路径的选择? 如何得到系统的多媒体输入设备 这是什么意思呀? error C2065: '_Application' : undeclared identifier vc调试的时候另一程序有弹出对话框会导致VC暂停运行,要等对话框关掉会才能接着运行,怎么办? 窗口刷新问题 再开一帖,ocx打包cab时inf文件怎样写
不知以下是不是你想要的可以考虑使用现成的成熟控件:柯达图象处理控件,包括imgadmin.ocx,imgedit.ocx,imgscan.ocx.对于图象可以考虑以上控件来保存,然后以二进制文件存入.
直接二进制流读取图象,然后存入数据库相应blog型字段下,
从数据库读图象时候也要用到相应反方向的处理.
一、将图像索引存储到数据库中,并且把图象资源以BLOB类型存储到数据库中。
二、将图像索引存储到数据库中,把图像资源存到文件系统中,并把图象在文件系统中的path存储到数据库中。 因为数据库的强项是存储和管理索引,文件系统的强项是存储和管理文件,为了达到最佳性能,需要中和文件系统和数据库的性能,决定最佳的方式,索引对于第一种处理方式,较适合有海量,极琐碎文件的情形,而第二中处理方式,较适合大文件,海量的情形。以下代码是我从别出贴过来的希望对你有用,更多的东西希望你自己去揣摩。
void CMytest::OnAdd()
{
//TODO:Add your control notification handler code here
m_pSet->AddNew();
UpdateData(TRUE);
CFile fileword;
CFileStatus fileStatus;
CString fileLocate;
static char BASED_CODE szFilter[]="image Files(.jpg)|.bmp||";
CFileDialog dlg(TRUE,NULL,NULL,0,NULL,this);
if(dlg.DoModal()==IDOK)
fileLocate=dlg.GetPathName();
else
fileLocate="";
if(fileLocate=="")
AfxMessageBox("you don't choise file");
else
{
fileword.Open(fileLocate,CFile::modeRead);
fileword.GetStatus(fileStatus);
m_pSet->m_REPORT.m_hData=GlobalAlloc(GPTR,fileStatus.m_size);
HGLOBAL hGlobal=GlobalAlloc(GPTR,fileStatus.m_size);
m_pSet->SetFieldDirty(&m_pSet->m_REPORT);
m_pSet->SetFieldNull(&m_pSet->m_REPORT,FALSE);
m_pSet->Update();
GlobalUnlock(hGlobal);
}
}
对于这方面的开发拥有领先技术和绝对优势的企业有国内的信雅达公司,以及国外的IBM公司。