如何使用vb6从记录集中检索不是返回值或输出参数的值

时间:2009-05-11 05:16:21

标签: stored-procedures vb6 ado

我在现有的第三方应用程序(SQL 2005)上有一个存储过程,我希望与之交互。

这是一个insert语句,后跟一个select语句,如下所示;

  
    Set @CustomerId = Cast(SCOPE_IDENTITY() As [int])

    Select @CustomerId

使用VB6如何访问@CustomerID的值?

set rs = cmd.Execute 

没有按预期返回结果集...

[编辑]

rs.Fields.Count为0.

任何访问结果记录集的尝试,例如 rs(0).Value 只会导致“找不到项目...”错误。 < / p>

1 个答案:

答案 0 :(得分:3)

我猜你的存储过程会返回多个记录集。

如果是这种情况,您可以使用NextRecordset()方法迭代它们。

MSDN:

  
      
  • 如果行返回命令成功执行但没有返回记录,   返回的Recordset对象将是   开放但空洞。通过测试此案例   验证BOF和EOF   属性都是真的。
  •   
  • 如果非行返回命令成功执行,则返回   Recordset对象将被关闭,其中   你可以通过测试国家来验证   Recordset上的属性。
  •   
  • 当没有更多结果时,记录集将设置为Nothing。
  •   

这意味着我会建议这样的事情来解决你的问题:

Set rs = cmd.Execute

''# fetch the first value of the last recordset
Do Until rs Is Nothing
  If rs.State = adStateOpen Then
    If Not (rs.BOF And rs.EOF) Then
      ''# You can do a different sanity check here, or none at all
      If rs.Fields(0).Type = adInteger Then
        CustomerId = rs.Fields(0).Value
      End If
    End If
  End If
  Set rs = rs.NextRecordSet
Loop

MsgBox CustomerId