VC中使用存储过程(收藏)

本文介绍了如何在VC++环境中使用存储过程,通过多个代码片段展示了创建并执行存储过程的方法,包括设置参数、输入输出处理等关键步骤。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

看了很多VC数据库的书,里面很少设计到用VC和存储过程操作的资料,网上找了又找,结果还是很少,收集了一下一些代码片断,以供参考。

代码片断1:

_variant_t _vValue;
 _variant_t RecordsAffected;
 VARIANT vtRetval;
 vtRetval.vt = VT_I2;
 _CommandPtr    pCmd = NULL;
 _ParameterPtr   pPrm = NULL;
 _variant_t  vtEmpty(DISP_E_PARAMNOTFOUND, VT_ERROR);
 _variant_t vtEmpty2(DISP_E_PARAMNOTFOUND, VT_ERROR);
 CString tempsql;
                pCmd.CreateInstance( __uuidof( Command ) );
                pPrm.CreateInstance( __uuidof( Parameter ) );
 pCmd ->ActiveConnection = pConn;
 pCmd ->CommandType = adCmdStoredProc;
 pCmd ->CommandText = _bstr_t(L"sp_addumpdevice");
 pPrm = pCmd ->CreateParameter( _bstr_t("retval"),adInteger,adParamReturnValue,sizeof(int),vtRetval);
 pCmd ->Parameters ->Append( pPrm );
 if(strcmp(sblx,"0")==0)
 {
  pPrm = pCmd ->CreateParameter( _bstr_t("sblx"),adChar,adParamInput,4,"disk" );
  pPrm ->Value ="disk";
 }
  else
  {

  pPrm = pCmd ->CreateParameter( _bstr_t("sblx"),adChar,adParamInput,4,"tape");
  pPrm ->Value ="tape";

  }
  pCmd ->Parameters ->Append( pPrm );

          pPrm = pCmd ->CreateParameter( _bstr_t("sbmc"),adVarChar,adParamInput,20,_bstr_t(sbmc));
          pPrm ->Value =_bstr_t(sbmc);
          pCmd ->Parameters ->Append( pPrm );
    
         pPrm = pCmd ->CreateParameter( _bstr_t("bflj"),adVarChar,adParamInput,50,_bstr_t(bflj));
         pPrm ->Value =_bstr_t(bflj);
         pCmd ->Parameters ->Append( pPrm );
         pCmd ->Execute( &vtEmpty, &vtEmpty2,adExecuteNoRecords);

代码片断2:

m_pParam =m_pCommand->CreateParameter("id",adInteger,adParamInput,-1,(_variant_t)"10");
//给参数设置各属性
m_pCommand->Parameters->Append(m_pParam);//加入到Command对象的参数集属性中

m_pParam1=m_pCommand->CreateParameter("Name",adVarChar,adParamInput,20,(_variant_t)"songwenfeng");
m_pCommand->Parameters->Append(m_pParam1);

m_pParam2=m_pCommand->CreateParameter("sdate",adVarChar,adParamInput,32,(_variant_t)"2004-6-8");
m_pCommand->Parameters->Append(m_pParam2);

代码片断3:

_ParameterPtr  para[3];  
           _CommandPtr  pCmd;  
 
           pCmd.CreateInstance("ADODB.Command");  
           para[0].CreateInstance("ADODB.Parameter");  
           para[1].CreateInstance("ADODB.Parameter");  
           para[2].CreateInstance("ADODB.Parameter");  
           pCmd->ActiveConnection=m_pConn;  
             
           pCmd->CommandText="存储过程名"  
           para[0]=pCmd->CreateParameter("",  adBSTR,adParamInput,  
                       sizeof(char[50]),vVar);  //字符串型输入参数  
           pCmd->Parameters->Append(para[0]);  
           para[1]=pCmd->CreateParameter("",  adInteger,adParamInput,  
                                               sizeof(int),olevariantVar);  //整型输入参数  
           pCmd->Parameters->Append(para[1]);  
           para[2]=pCmd->CreateParameter("",  adBSTR,adParamOutput,  
                       sizeof(char[50]),"");    //字符串型输出参数  
           pCmd->Parameters->Append(para[2]);  
           pCmd->Execute(  NULL,  NULL,  adCmdStoredProc);  

代码片断4:

使用vc++    ,sql  server。  
假设一个表:name      sex        age.  
现在想求出有多少个男性,多少个女性。  
如果不是用存储过程,就必须一条一条的比较。  
现在想问一下:如何写这个存储过程,如何在vc中调用这个存储过程,如何取得存储过程的结果。  
---------------------------------------------------------------  
 
_CommandPtr  cmmd;    
_ParameterPtr  param;      
HRESULT  hr  =  cmmd.CreateInstance(__uuidof(Command));    
 if(FAILED(hr))      
   {      AfxMessageBox("NewNetDatabase()中创建_CommandPtr对象失败");      
           return  "创建对象失败";    
   }      
cmmd->ActiveConnection  =  m_pConnection;//需要使用的ADO连接      
cmmd->CommandType=adCmdStoredProc;      
cmmd->CommandText=_bstr_t("pkg_shenrole.AddRoleInfo");//这个就是存储过程名称  
param  =  cmmd->CreateParameter("",adBigInt,  adParamInput,  sizeof(long),(long)(nRoleId));    
cmmd->Parameters->Append(param);
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值