我在现有的第三方应用程序(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>
答案 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