运行返回多个结果集的存储过程

RDO

该示例举例说明了如何执行一个返回多个结果集的查询。对于存储过程来说,返回多个行组或返回包含动作查询结果的多个结果集是很普通的。结果,您的代码必须分别处理每个结果集,否则您将不能使用自己的查询结果。在 RDO 中,您使用 MoreResults 方法来每次处理一个结果集。每次对 MoreResults 的调用都将关闭当前的结果集,并移动到下一个结果集(如果有的话)。

Private Sub MultipleRSButton_Click()
   sql = "Select * from Authors Where year_born is not null; " _
    & "Select * from Authors where year_born is  null"
   Set rs = cn.OpenResultset(sql)
   rdoGrid1.ShowData rs

   i = MsgBox("Ready for next results?", vbYesNoCancel)
   If i = vbYes Then
      If rs.MoreResults Then
         rdoGrid1.ShowData rs
      End If
   End If
End Sub

ADO

下面的代码举例说明了如何在 ADO 中处理返回多个结果集的 SP。ADO 的解决方案与 RDO 解决方案的不同之处在于:ADO 用的是 NextRecordset 方法,在该方法中,您将批处理中的下一个记录集分配给某个 ADO Recordset 对象。下一个记录集的读取并不覆盖第一个,如同在 RDO 中的那样。ADO 还允许多个记录集,如果数据提供程序支持的话。

Private Sub MultipleRSButton_Click()
   Dim rs As New ADODB.Recordset
   sql = "Select * from Authors Where year_born is not null; " _
    & "Select * from Authors where year_born is  null"
   rs.Open sql, cn
   Do
      i = MsgBox("Ready for results?", vbYesNoCancel)
      If i = vbYes Then
         ADOGrid1.ShowData rs
         Set rs = rs.NextRecordset
      End If
   Loop Until rs.State = adStateClosed
End Sub