gpt4 book ai didi

VB6 ADO 设置 rs=command.Execute

转载 作者:行者123 更新时间:2023-12-04 21:52:16 27 4
gpt4 key购买 nike

Set rs = command.Execute 
if not rs.EOF then
'logic here
end if

上面的代码在第 2 行失败,因为 rs 已关闭(可能是 oledb 提供程序错误地认为这是一个插入命令,因此不需要返回任何内容)。该命令是一个插入语句,类似于:

Insert into log(Name,Value) values("xxx", 123); select scope_identity()

我需要在一次往返中从服务器返回身份。有什么想法吗?

PS:使用字段名称更新了插入语句(感谢 Eduardo),但这不是问题所在。

最佳答案

您的问题是数据源返回两个记录集。这是由于数据库的 NOCOUNT 设置。第一个记录集仅用于返回受插入语句影响的记录。第二个记录集返回 SELECT SCOPE_IDENTITY 调用的结果。所以你需要做:

If rs.State = adStateClosed Then
Set rs = rs.NextRecordset()
End If

然后你可以检查 EOF 等等。但我通常会避免所有这些并将这样的东西放在存储过程中。然后我在存储过程中设置 NOCOUNT ON。并在存储过程结束时返回 id。现在你的插入可能只是像那样简单,但逻辑可能会增加。通过将它放在存储过程中,您只需更改存储过程,而不必更改已编译的 VB 应用程序。它还稍微隔离了数据库代码。

您不想做的是在您的声明中设置 NOCOUNT ON。如果不是整个数据库,我认为这会影响整个连接。

关于VB6 ADO 设置 rs=command.Execute,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/725319/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com