_commandptr 和 _Recordsetptr 的问题

54sp 2003-03-06 10:22:44
搜遍整个论坛,也没有关于这方面东西,只好麻烦大家解决啦!

我用ADO执行存储过程.参数中有入参和出参,有的还带有结果集.

现在的问题是如果把参数直接送进去,没有结果集的,可以把出参都取回来.但是如果有结果集的出参的值就不知道怎么获得了!

代码如下:
try
{
cmd.CreateInstance("ADODB.Command");
//入参

for(j=0;j<cfg.AllFunc[i].InputParamNum;j++)
{
GetValue(recvbuff,Param[j],j+2,'|');

pParamInput[j].CreateInstance("ADODB.Parameter");
pParamInput[j]->Name = cfg.AllFunc[i].InputParam[j].ParamName;
pParamInput[j]->Type = (DataTypeEnum)cfg.AllFunc[i].InputParam[j].ParamType;
pParamInput[j]->Size = cfg.AllFunc[i].InputParam[j].ParamSize;
pParamInput[j]->Direction=adParamInput;
Paramstr.Empty();
Paramstr.Format("%s",Param[j]);
pParamInput[j]->Value = _variant_t(Paramstr);
cmd->Parameters->Append(pParamInput[j]);
}

//出参
for(k=0;k<cfg.AllFunc[i].OutputParamNum;k++)
{

pParamOutput[k].CreateInstance("ADODB.Parameter");
pParamOutput[k]->Name = cfg.AllFunc[i].OutputParam[k].ParamName;
pParamOutput[k]->Type = (DataTypeEnum)cfg.AllFunc[i].OutputParam[k].ParamType;
pParamOutput[k]->Size = cfg.AllFunc[i].OutputParam[k].ParamSize;
pParamOutput[k]->Direction=adParamOutput;
cmd->Parameters->Append(pParamOutput[k]);
}
cmd->ActiveConnection = piConnection;
cmd->CommandText=cfg.AllFunc[i].StoredProc; //存储过程的名字
cmd->CommandType=adCmdStoredProc;//表示为存储过程adCmdStoredProc
cmd->Execute(&fieldcount, NULL, adCmdStoredProc);

这样的话可以接受到出参!

如果最后一句cmd->Execute(&fieldcount, NULL, adCmdStoredProc);
改成 pRecordSet = cmd->Execute(&fieldcount, NULL, adCmdStoredProc);
的话,可以把返回的结果集取回来,但出参就不知道怎么取了!

...全文
20 1 打赏 收藏 转发到动态 举报
写回复
用AI写文章
1 条回复
切换为时间正序
请发表友善的回复…
发表回复
ifengfeng 2003-05-15
  • 打赏
  • 举报
回复
long o = cmd->Parameters->Item[(short)0]->Value;
我花钱买的,结果没用上,太亏了 本系统采用ADO来访问SQL数据库,这里充分应用了C++类封装的功能,根据本系统应用的范围,将访问数据库的功能函数封装在一个类CMyDatabase。 正如前所述,ADO是访问数据库的一个方法,它提供了不同的接口。ADO库包含三个基本接口:_ConnectionPtr接口、_CommandPtr接口和_RecordsetPtr接口。 _ConnectionPtr接口返回一个记录集或一个空指针。通常使用它来创建一个数据连接或执行一条不返回任何结果的SQL语句,如一个存储过程。使用_ConnectionPtr接口返回一个记录集不是一个好的使用方法。对于要返回记录的操作通常用_RecordserPtr来实现。而用_ConnectionPtr操作时要想得到记录条数得遍历所有记录,而用_RecordserPtr时不需要。 _CommandPtr接口返回一个记录集。它提供了一种简单的方法来执行返回记录集的存储过程和SQL语句。在使用_CommandPtr接口时,你可以利用全局_ConnectionPtr接口,也可以在_CommandPtr接口里直接使用连接串。如果你只执行一次或几次数据访问操作,后者是比较好的选择。但如果你要频繁访问数据库,并要返回很多记录集,那么,你应该使用全局_ConnectionPtr接口创建一个数据连接,然后使用_CommandPtr接口执行存储过程和SQL语句。 _RecordsetPtr是一个记录集对象。与以上两种对象相比,它对记录集提供了更多的控制功能,如记录锁定,游标控制等。同_CommandPtr接口一样,它不一定要使用一个已经创建的数据连接,可以用一个连接串代替连接指针赋给_RecordsetPtr的connection成员变量,让它自己创建数据连接。如果你要使用多个记录集,最好的方法是同Command对象一样使用已经创建了数据连接的全局_ConnectionPtr接口 ,然后使用_RecordsetPtr执行存储过程和SQL语句。  根据这些,我们将数据库的各种操作封装到CMyDatabase类里。几个主要函数说明如下:

4,011

社区成员

发帖
与我相关
我的任务
社区描述
VC/MFC 数据库
社区管理员
  • 数据库
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧