关于存储过程返回多个记录集,如何处理? --by argin

东土 2001-11-26 05:48:29
环境:
SQL SERVER (好像ORACLE可以)
VC,VB--ADO
情况:
存储过程返回多个记录集
CREATE PROCEDURE TaskInfo_Set --
AS
begin
select * from error_tab1
select * from tab2
end

用_ConnectionPtr, _CommandPtr 的Execute() 来执行存储过程只能得到一个返回的记录集和输出参数!(VB中情况也一样)
各位专家们帮帮忙!请问如何获得存储过程返回的多个记录集?
...全文
352 13 打赏 收藏 转发到动态 举报
写回复
用AI写文章
13 条回复
切换为时间正序
请发表友善的回复…
发表回复
blackfiles 2001-11-28
  • 打赏
  • 举报
回复
我以前也没有解决这个问题,现在来试下。
东土 2001-11-28
  • 打赏
  • 举报
回复
正确!
ADO:NextRecordset
OLE DB:GetNextResult
东土 2001-11-27
  • 打赏
  • 举报
回复
多谢大家,我已经解决了!OLD DB
yuminggang 2001-11-27
  • 打赏
  • 举报
回复
利用RECORDSET对象可以循环所有得到的记录集。

方法是NextRecordset 方法 (ADO)以下资料来自(msdn)


清除当前 Recordset 对象并通过提前命令序列返回下一个记录集。

语法

Set recordset2 = recordset1.NextRecordset( RecordsAffected )

返回值

返回 Recordset 对象。在语法模型中,recordset1 和 recordset2 可以是相同的 Recordset 对象,否则可以使用不同的对象。

参数

RecordsAffected 可选的长整型变量,提供者向其返回当前操作所影响的记录数目。

说明

使用 NextRecordset 方法返回复合命令语句中下一条命令的结果,或者是返回多个结果的已存储过程结果。如果使用 Command 的 Execute 方法或者 Recordset 的 Open 方法打开基于复合命令语句(例如“SELECT * FROM table1;SELECT * FROM table2”)的 Recordset 对象,则 ADO 仅执行第一条命令并将结果返回到“记录集”。要访问语句中后续命令的结果,请调用 NextRecordset 方法。

只要有其他的结果,NextRecordset 方法将继续返回 Recordset 对象。如果行返回命令没有返回记录,则返回的 Recordset 对象将为空;在确认 BOF 和 EOF 都为空的情况下可测试这种情况。如果非按行返回命令成功执行,则返回的 Recordset 对象将关闭,通过测试 Recordset 的 State 属性可以测试这种情况。如果没有其他的结果,“记录集”将设置为 Nothing。

如果在立即更新模式下进行编辑,调用 NextRecordset 方法将产生错误。应首先调用 Update 或 CancelUpdate 方法。

如果需要通过填写 Parameters 集合或者通过使用原有的 Open 或 Execute 调用传送数组为复合语句中的多个命令传送参数,则参数在集合或数组中的次序必须与它们在命令序列中各自命令的次序相同。在读取输出参数值之前必须读取所有结果。

在调用 NextRecordset 方法时,ADO 仅执行语句中的下一条命令。如果在单步执行整个命令语句之前显式关闭 Recordset 对象,则 ADO 不执行其余的命令。

Remote Data Service 用法 客户端 Recordset 对象无法使用 NextRecordset。
linazhu 2001-11-27
  • 打赏
  • 举报
回复
笨办法:存入临时表,再取,关注更好的办法
liaogs 2001-11-27
  • 打赏
  • 举报
回复
怎么解决的?
pxq 2001-11-27
  • 打赏
  • 举报
回复
这个问题,我原来问过,没有人回答,试试yuminggang(于明刚) 的方法。

东土 2001-11-26
  • 打赏
  • 举报
回复
这个问题的确有点难度!
ADO是用OLD DB 封装后的,查了一下,好像没有这方面的

不太清楚用OLE DB行不行?
东土 2001-11-26
  • 打赏
  • 举报
回复
TO :flowerofwind(现实很残酷) 
这我知道!
但前端程序取不到!
flowerofwind 2001-11-26
  • 打赏
  • 举报
回复
ADO我不会,但是你在isql中执行改存储过程,肯定是两个结果集都取出来的,
查查资料吧,
东土 2001-11-26
  • 打赏
  • 举报
回复
TO flowerofwind:
第一个结果集好取,其它的呢?怎么取?(例如:在AOD的情况?其它?)

TO IronPromises:
你是指输出参数为游标吗,然后在程序中Parameters访问游标?
如果我返回的记录集个数是未知的,不定的?这样处理好像不行!
请描述一下,最好有例子!
IronPromises 2001-11-26
  • 打赏
  • 举报
回复
用多个out参数返回结果集.
Oracle可以做到.SQL Server2000应该也能做到.
flowerofwind 2001-11-26
  • 打赏
  • 举报
回复
procedure的结果级已经出来了,只是你没有取完

34,575

社区成员

发帖
与我相关
我的任务
社区描述
MS-SQL Server相关内容讨论专区
社区管理员
  • 基础类社区
  • 二月十六
  • 卖水果的net
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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