mfc中ado上传image到sql数据库
来源:互联网 发布:淘宝开店考试入口 编辑:程序博客网 时间:2024/06/09 21:22
mfc中ado上传image到sql server数据库
一.关于mfc的使用就不在此献丑了,直接讲ado连接sql server数据库。
1.我采用的是连接方法是调用一个udl文件中的数据库配置。
(1)新建一个txt文件,名字自己取,然后把txt改为udl扩展名,如下图。
(2)双击打开adosql.udl,如下图红色矩形操作。
2.mfc中连接数据库代码。
在stdafx.h中加入以下代码:
</pre><pre name="code" class="cpp">#import "c:\program files\common files\system\ado\msado15.dll" rename_namespace("ADOCG") rename("EOF","adoEOF")using namespace ADOCG;我在mfc界面上加了个按钮,点击时就去连接数据库。连接代码如下:
::CoInitialize(NULL); _ConnectionPtr m_pConnection; _CommandPtr m_pCommand; HRESULT hr; hr=m_pConnection.CreateInstance(__uuidof(Connection)); m_pConnection->ConnectionString="File Name=adosql.udl"; try { if(SUCCEEDED(hr)) { //hr=m_pConnection->Open(_bstr_t(L"Provider=SQLOLEDB.1;Persist Security Info=False;UInitial Catalog=CXKENSDyeingERP;Data Source=192.168.160.3"),_bstr_t (L"sa"),_bstr_t (L"king"),adModeUnknown); hr=m_pConnection->Open(m_pConnection->ConnectionString,L"",L"",adModeUnknown); } } catch(_com_error & err) { AfxMessageBox(err.Description(),MB_OK,0); AfxMessageBox(err.ErrorMessage(),MB_OK,0); MessageBox(_T("无法连接SQL SERVER 服务器,程序将退出。请检查网络设备"),MB_OK,0); return; }二.连接之后就该数据传输了,有一点要注意的,因为我在这要把图片的数据直接传到sql server,然后我的图片大小一幅为4M,所以要在mfc中设置堆栈大小,如下图:
接下来就可以数据直接上传了,我采用的_CommandPtr m_pCommand来上传数据。
char filename[100]="";GetDlgItemText(IDC_FILENAME,filename,100);if(strcmp(filename,"")==0){MessageBox("不能为空!");return;}CString strtxt="";strtxt+="D:/相机异常图片/";CString imagepathtemp=strtxt;strtxt+=filename;strtxt+="/上传日志.txt"; //执行储存过程CString cvar1,cvar2, cvar3,cvar4,cvar5;cvar1=filename; //卡号,即卷号 cvar2="有疵点"; //疵点 cvar3="无"; //备注 //cvar4="12.50米"; //长度 //cvar5="左边13.68厘米"; //位置 //读取“上传日志.txt中内容”CStdioFile File;File.Open(strtxt,CFile::modeRead);CString strtemp;while(File.ReadString(strtemp))//while循环读取每一行字符{ cvar4=strtemp; //长度 File.ReadString( cvar5); try { m_pCommand.CreateInstance(__uuidof(Command)); m_pCommand->ActiveConnection=m_pConnection; m_pCommand->CommandType=adCmdStoredProc; m_pCommand->CommandText=_bstr_t("dbo.qmOnlineCheckWriteData"); _variant_t vvar1,vvar2,vvar3,vvar4,vvar5; vvar1=_variant_t(_bstr_t(cvar1)); vvar2=_variant_t(_bstr_t(cvar2)); vvar3=_variant_t(_bstr_t(cvar3)); vvar4=_variant_t(_bstr_t(cvar4)); vvar5=_variant_t(_bstr_t(cvar5)); _ParameterPtr mp_var1,mp_var2,mp_var3,mp_var4,mp_var5,mp_var6; mp_var1.CreateInstance(__uuidof(Parameter)); mp_var2.CreateInstance(__uuidof(Parameter)); mp_var3.CreateInstance(__uuidof(Parameter)); mp_var4.CreateInstance(__uuidof(Parameter)); mp_var5.CreateInstance(__uuidof(Parameter)); mp_var6.CreateInstance(__uuidof(Parameter)); mp_var1=m_pCommand->CreateParameter ( _bstr_t("卡号"), adVarChar, adParamInput, 50, vvar1 ); m_pCommand->Parameters->Append(mp_var1); mp_var2=m_pCommand->CreateParameter (_bstr_t("疵点"), adVarChar, adParamInput, 50, vvar2 ); m_pCommand->Parameters->Append(mp_var2); mp_var3=m_pCommand->CreateParameter ( _bstr_t("备注"), adVarChar, adParamInput, 500, vvar3 ); m_pCommand->Parameters->Append(mp_var3); mp_var4=m_pCommand->CreateParameter ( _bstr_t("长度"), adVarChar, adParamInput, 50, vvar4 ); m_pCommand->Parameters->Append(mp_var4); mp_var5=m_pCommand->CreateParameter (_bstr_t("位置"), adVarChar, adParamInput, 50, vvar5 ); m_pCommand->Parameters->Append(mp_var5); CString imagepath = ""; File.ReadString( imagepath); imagepath=imagepathtemp+imagepath; VARIANT varChunk;SAFEARRAY* psa;SAFEARRAYBOUND rgsabound[1];CFile f(imagepath.operator LPCTSTR(),CFile::modeRead);BYTE bval[4195382+1];long uIsRead=0;while (1){ uIsRead=f.Read(bval,4195382); if (uIsRead==0) break; rgsabound[0].cElements=uIsRead; rgsabound[0].lLbound=0; psa=SafeArrayCreate(VT_UI1,1,rgsabound); for (long index=0;index<uIsRead;index++) { if (FAILED(SafeArrayPutElement(psa,&index,&bval[index]))) AfxMessageBox(_T("错误。")); } varChunk.vt =VT_ARRAY|VT_UI1; varChunk.parray=psa; if (uIsRead<4195382) break; } mp_var6=m_pCommand->CreateParameter ( _bstr_t("图片"), adBinary, adParamInput, 5000000, varChunk ); m_pCommand->Parameters->Append(mp_var6); VariantClear(&varChunk); SafeArrayDestroyData(psa); f.Close(); _variant_t vNull; vNull.vt=VT_ERROR; vNull.scode=DISP_E_PARAMNOTFOUND; m_pCommand->Execute(&vNull,&vNull,adCmdStoredProc); //cvar2=mp_var2->Value.bstrVal;// cvar3=mp_var3->Value; } catch(_com_error &error) { MessageBox(error.ErrorMessage(),_T("ADO错误!")); MessageBox(error.Description(),_T("ADO错误!")); return; }}File.Close();
m_pConnection->Close();//断开连接 CoUninitialize();//释放
CString imagepath = ""; File.ReadString( imagepath); imagepath=imagepathtemp+imagepath; VARIANT varChunk;SAFEARRAY* psa;SAFEARRAYBOUND rgsabound[1];CFile f(imagepath.operator LPCTSTR(),CFile::modeRead);BYTE bval[4195382+1];long uIsRead=0;while (1){ uIsRead=f.Read(bval,4195382); if (uIsRead==0) break; rgsabound[0].cElements=uIsRead; rgsabound[0].lLbound=0; psa=SafeArrayCreate(VT_UI1,1,rgsabound); for (long index=0;index<uIsRead;index++) { if (FAILED(SafeArrayPutElement(psa,&index,&bval[index]))) AfxMessageBox(_T("错误。")); } varChunk.vt =VT_ARRAY|VT_UI1; varChunk.parray=psa; if (uIsRead<4195382) break; } mp_var6=m_pCommand->CreateParameter ( _bstr_t("图片"), adBinary, adParamInput, 5000000, varChunk ); m_pCommand->Parameters->Append(mp_var6); VariantClear(&varChunk); SafeArrayDestroyData(psa); f.Close(); _variant_t vNull; vNull.vt=VT_ERROR; vNull.scode=DISP_E_PARAMNOTFOUND; m_pCommand->Execute(&vNull,&vNull,adCmdStoredProc); }
0 0
- mfc中ado上传image到sql数据库
- MFC 中ADO链接sql server 数据库
- C#中使用FileUpload上传图片到SQL数据库中以image类型存储并使用Image控件显示注意事项
- MFC中ADO数据库基本sql语句应用
- C#上传图到SQL数据库中
- MFC中用ADO访问SQL数据库
- MFC通过ADO连接SQL SERVER数据库
- MFC ADO 连接SQL SERVER数据库
- MFC使用ADO连接SQL Server数据库
- ADO+MFC数据库编程常用SQL语句
- MFC以ADO方式连接SQL数据库
- MFC连接到SQL(ADO数据库访问技术)——表的查询,添加,删除
- MFC连接到SQL(ADO数据库访问技术)——表的查询,添加,删除
- MFC中使用ADO访问数据库
- MFC 中ADO方式操作ACCESS数据库
- MFC中使用ADO访问Oracle数据库
- MFC中ADO方式操作数据库实例
- MFC VC ADO链接SQL Server数据库 操作数据库数据
- C++中tuple类型
- 日期类的加减及java中所以日期类的操作算法大全
- iOS小结(一)resolution 适配问题
- oracle添加新用户
- 二分法查找
- mfc中ado上传image到sql数据库
- 搜到的解决上传漏洞的方法
- abap在普通屏幕实现动态显示隐藏屏幕元素
- HashSet判断唯一性的步骤
- 防注入的办法
- 【bzoj3594】【SCOI2014】【方伯伯的玉米田】【dp+二维树状数组】
- 《A Fragment-Based Approach to Object Representation and Classifiacation》阅读翻译
- 1064. Complete Binary Search Tree (30)
- python代码片段