存储过程问题

flyelfsky 2003-09-15 12:15:17
环境:vc6+sp5,sql2000
下面是我的一个存储过程
create procedure usp_oprlog_query
@RecordCount INTEGER OUTPUT
AS
SELECT * FROM tablename
SET @RecordCount = @@ROWCOUNT
GO

我在VC中使用ODBC API进行调用
SQLHSTMT hStmt;
SQLAllocHandle(...); // 得到hStmt

DWORD dwRecordCount(0);
SDWORD cb1;
::SQLBindParameter(hStmt, 1, SQL_PARAM_OUTPUT, SQL_C_LONG, SQL_INTEGER,0,0,&dwRecordCount, 0, &cb1);

::SQLExecDirect(hStmt, (SQLCHAR*)"{call usp_oprlog_query(?)}", SQL_NTS);
TRACE("记录总数为:%d\n", dwRecordCount);
...

得到的记录数量为0,可是我在查询分析器中能够正确得到结果

请教高手分析一下问题
...全文
41 5 打赏 收藏 转发到动态 举报
写回复
用AI写文章
5 条回复
切换为时间正序
请发表友善的回复…
发表回复
greenery 2003-09-30
  • 打赏
  • 举报
回复
对,你可能需要读取完返回的纪录级,才可以去参数值
flyelfsky 2003-09-17
  • 打赏
  • 举报
回复
在一段帮助里面找到这句话:用于SQL Server的Microsoft OLE DB提供程序或SQL Server ODBC驱动程序回返回代码和输出参数值防止在绑定的变量中(存储过程),在返回给客户端的最后一个数据包中,Microsoft SQL Server返回输出参数和返回代码。因此,只有在应用程序处理或取消存储过程所返回的所有结果集后,才可以访问返回代码和输出参数值。

按照这段说法,在我的存储过程中返回的时候,得到的结果集还没有处理完,所以不能得到输出参数。这是不是sql server的一个不合理的地方呢?
flyelfsky 2003-09-15
  • 打赏
  • 举报
回复
返回的都是0,即成功了,就是结果不正确
skt01 2003-09-15
  • 打赏
  • 举报
回复
没这么用过,我估计你绑定参数那就没有成功或者根本就没有执行成功
flyelfsky 2003-09-15
  • 打赏
  • 举报
回复
如果存储过程返回了一个记录集,那么出口参数就不能正确得到数据,为什么呢

4,011

社区成员

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

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