VC中使用ADO调用存储过程

本文介绍使用ADO连接SQL Server的方法及通过存储过程传递参数的实现细节。具体包括初始化连接对象、设置连接字符串并打开连接,以及创建并执行存储过程,处理输入输出参数等步骤。
_ConnectionPtr m_pConnection;
 _CommandPtr m_pCommand;
.cpp中在函数中执行
//建立ado连接
 HRESULT hr;
 hr=m_pConnection.CreateInstance(__uuidof(Connection));
 try
 {
 if(SUCCEEDED(hr))
 {
 hr=m_pConnection->Open(_bstr_t(L"Provider=SQLOLEDB.1;Persist Security Info=False;User ID=sa;Initial Catalog=Viper;Data Source=Viper"),_bstr_t (L"sa"),_bstr_t (L""),adModeUnknown);
 }
 }
 catch(_com_error & err)
 {
 AfxMessageBox(err.Description(),MB_OK,0);
 AfxMessageBox(err.ErrorMessage(),MB_OK,0);
 AfxMessageBox("无法连接SQL SERVER 服务器,程序将退出。请检查网络设备",MB_OK,0);
 exit(0);
 }

//执行储存过程
 CString cvar1,cvar2;
 int cvar3;
 cvar1="ddd";
 cvar2="";
 cvar3=0;
 try
 {
 m_pCommand.CreateInstance(__uuidof(Command));
 m_pCommand->ActiveConnection=app->m_pConnection;
 m_pCommand->CommandType=adCmdStoredProc;
 m_pCommand->CommandText=_bstr_t("pr_zs_dzdy");

 _variant_t vvar1,vvar2,vvar3;
 vvar1=_variant_t(_bstr_t(cvar1));
 vvar2=_variant_t(_bstr_t(cvar2));
 vvar3=_variant_t(cvar3);
 _ParameterPtr mp_var1,mp_var2,mp_var3;
 mp_var1.CreateInstance(__uuidof(Parameter));
 mp_var2.CreateInstance(__uuidof(Parameter));
 mp_var3.CreateInstance(__uuidof(Parameter));

 mp_var1=m_pCommand->CreateParameter
 (
 _bstr_t("var1"),
 adVarChar,
 adParamInput,
 3,
vvar1
);
 m_pCommand->Parameters->Append(mp_var1); 

 mp_var2=m_pCommand->CreateParameter
 (
 _bstr_t("var2"),
 adVarChar,
 adParamOutput,
 3,
 vvar2
 );
 m_pCommand->Parameters->Append(mp_var2); 

 mp_var3=m_pCommand->CreateParameter
 (
 _bstr_t("var3"),
 adIntger,
 adParamOutput,
 9,
 vvar3
 );
 m_pCommand->Parameters->Append(mp_var3); 


 _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(),"ADO错误!");
 MessageBox(error.Description(),"ADO错误!");
 }

 
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值