微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

调用存储过程进行图片的插入或修改

//pass   blob   to   stored   procedure       //build   by   masterz   20050301   with   VC2003,  Windows   2003,  sqlServer   2000.     #include   "stdafx.h"     #import   "C:/PROGRA~1/COMMON~1/System/ado/msado15.dll"   rename(   "EOF",  "adoEOF"   )     struct   InitOle     {     InitOle()     {   ::CoInitialize(NULL);   }     ~InitOle()   {   ::CoUninitialize();     }     }   _init_InitOle_;     void   PrintProviderError(ADODB::_ConnectionPtr   pConnection);         void   print_properties(LPCTSTR   name,  ADODB::PropertiesPtr   Properties)     {     long   prop_count   =   Properties->GetCount();     printf("%s   property   count   =   %d/n",name,prop_count);     for(long   i=0;i<prop_count;i++)     {     printf("%s   property   [%d]:%s/n",i,(LPCSTR)Properties->GetItem(i)->Name);     }     }     int   main(int   argc,  char*   argv[])     {     ADODB::_ConnectionPtr     Conn1;     ADODB::_CommandPtr         Cmd1;     ADODB::_ParameterPtr     oldParam=   NULL;     ADODB::_ParameterPtr   inParam=NULL;     ADODB::_ParameterPtr   blobParam=NULL;     _variant_t     vtEmpty   (disP_E_ParaMNOTFOUND,  VT_ERROR);     _variant_t     vtEmpty2   (disP_E_ParaMNOTFOUND,  VT_ERROR);     //_bstr_t         bstrConnect="Provider=OraOLEDB.Oracle;Data   Source=orcl;User   Id=system;Password=oracle;";       _bstr_t         bstrConnect="Driver={sql   Server};Server=localhost;Database=zxg;Uid=sa;Pwd=sa;"   ;       //create   procedure   dbo.insert_update_blob(@fn   varchar(9),@filecontent   image)   as     //   if   exists   (select   *   from   table1   where   filename=@fn   )     //   begin     //   update   table1   set   content=@filecontent   where   filename=@fn     //   end     //   else     //   begin     //   insert   table1   (filename,content)   values(@fn,@filecontent)     //   end     _bstr_t         bstrSP("{CALL   insert_update_blob(?,?)}"   );     try     {     _variant_t   varOptional(disP_E_ParaMNOTFOUND,VT_ERROR);       ADODB::_StreamPtr   adostream;     adostream.CreateInstance(_T("ADODB.Stream"));     adostream->Type   =   ADODB::adTypeBinary;     adostream->Open(varOptional,ADODB::adModeUnkNown,  ADODB::adOpenStreamUnspecified,  _T(""),  _T(""));       adostream->LoadFromFile("C://masterz//20041229.rar");     _variant_t   vReadTo   =   adostream->Read(ADODB::adReadAll);       long   blob_size   =   adostream->GetSize();     adostream->Close();         _bstr_t   bstrEmpty;     Conn1.CreateInstance(   __uuidof(   ADODB::Connection   )   );     Cmd1.CreateInstance(   __uuidof(   ADODB::Command   )   );     Conn1->ConnectionString   =   bstrConnect;     Conn1->Open(   bstrConnect,  bstrEmpty,  -1   );     Cmd1->ActiveConnection   =   Conn1;     Cmd1->CommandText             =   bstrSP;     Cmd1->CommandType             =   ADODB::adCmdText;     Conn1->Properties->Refresh();     inParam   =   Cmd1->CreateParameter(_bstr_t("@fn"),ADODB::adChar,ADODB::adParamInput,2,_variant_t(   "a"   ));     Cmd1->Parameters->Append(inParam);     blobParam   =   Cmd1->CreateParameter(_bstr_t("@filecontent"),ADODB::adLongVarBinary,blob_size,vReadTo);     Cmd1->Parameters->Append(blobParam);     Cmd1->Properties->Refresh();     print_properties("Cmd1",Cmd1->Properties);     Cmd1->Execute(NULL,NULL,ADODB::adExecutenorecords);     Conn1->Close();     //select   filename,datalength(content)   from   table1   where   datalength(content)>0     }     catch(_com_error   &e)     {     _bstr_t   bstrSource(e.source());     _bstr_t   bstrDescription(e.Description());     printf("/nCOM   error   occurred,  Source   :   %s   /n   Description   :   %s   /n",(LPCSTR)bstrSource,(LPCSTR)bstrDescription);     PrintProviderError(Conn1);     }     printf("/nprogram   end/n");     return   0;     }     VOID   PrintProviderError(ADODB::_ConnectionPtr   pConnection)     {     ADODB::ErrorPtr     pErr   =   NULL;     long             nCount   =   0;     long             i   =   0;     if(   (pConnection->Errors->Count)   >   0)     {     nCount   =   pConnection->Errors->Count;     for(i   =   0;   i   <   nCount;   i++)     {     pErr   =   pConnection->Errors->GetItem(i);     printf("/n/t   Error   number:   %x/t%s",  pErr->Number,  (LPCSTR)pErr->Description);     }     }     }

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 [email protected] 举报,一经查实,本站将立刻删除。

相关推荐