VC中使用ADO调用存储过程实现方法
2008-11-12 19:26:39 来源:WEB开发网@pout1 ( char(10) , 输入/输出)
@RETURN_VALUE是第0个参数,@pin1是第1个,依此类推
以上信息可以在SQL 的查询分析器中看到,注意,这些参数的顺序很重要
3.调用的前期准备
这就不多说了,什么import 库阿,建立连接阿,什么的,不多说了。
假定连接是pConn
注意,这里要把pConn设定成adUseClient型
pConn->CursorLocation =adUseClient;
下面我要贴具体的代码了,为了精简所贴的代码,我把所有的捕获异常都没贴出来(try catch)
4.使用Refresh的方法来调用
先定义一些变量
_CommandPtr pCmd = NULL;
_RecordsetPtr pRecordset = NULL;
初试化他们
pCmd.CreateInstance(__uuidof(Command));
pRecordset.CreateInstance(_uuidof(Recordset));
pCmd->ActiveConnection = pConn;
pCmd->CommandType = adCmdStoredProc;
pCmd->CommandText=_bstr_t(_T("sp_1")); //SP Name
然后给那些input参数赋值 pCmd->Parameters->Refresh();
pCmd->Parameters->Item[_variant_t(_bstr_t("@pin1") )]->Value=_variant_t(3);
pCmd->Parameters->Item[_variant_t(_bstr_t("@pin2") )]->Value=_variant_t("DD");
这个refresh一定要有,调SP
pRecordset = pCmd->Execute(NULL,NULL,adCmdStoredProc);
int retVal = -1;
_variant_t VretVal ;
//GetRetVal
VretVal = pCmd->Parameters->GetItem(short(0))->Value;
retVal = VretVal.lVal;
Info.Format(_T("The Return Value is : %d"),retVal);
MessageBox(Info);
//output1
VretVal = pCmd->Parameters->GetItem(short(3))->Value;
retVal = VretVal.lVal;
Info.Format(_T("The output1 Value is : %d"),retVal);
MessageBox(Info);
//@pout2
VretVal = pCmd->Parameters->GetItem(short(4))->Value;
Info= (LPCTSTR)_bstr_t(VretVal);
CString info1;
info1.Format(_T("The output2 Value is : %s"),Info);
MessageBox(info1);
//取记录集里面的内容
if (pRecordset->adoBOF && pRecordset->adoEOF)
{
MessageBox("没有符合条件的记录存在!","提示");
if(pRecordset != NULL && pRecordset->State)
{
pRecordset->Close();
pRecordset = NULL;
}
pCmd.Detach();
return;
}
pRecordset->MoveFirst();
for(;!pRecordset->adoEOF;pRecordset->MoveNext())
{
VRectVal = pRecordset->GetCollect(_T("Name"));
StrVal = (LPCTSTR)_bstr_t(VRectVal);
m_list.AddString(StrVal);
}
if(pRecordset != NULL && pRecordset->State)
{
pRecordset->Close();
pRecordset = NULL; [Page]
}
最后pCmd.Detach();
更多精彩
赞助商链接