gpt4 book ai didi

sql-server - 为什么 adParamOutput 参数执行后不包含值

转载 作者:行者123 更新时间:2023-12-03 02:33:41 24 4
gpt4 key购买 nike

我使用 ASP classic 和 ADO,连接到 SQL Server 2008。

我继承了这段代码,它被严重破坏了,我将尝试重新创建相关部分。如果您需要更多详细信息或我遗漏了某些内容,请告诉我。

我创建一个命令并添加参数

oCmd.CommandType = adCmdStoredProc
...
oCmd.Parameters.Append oCmd.CreateParameter("@MyOutputParam", adInteger, adParamOutput, 4, NULL)

稍后,我从该命令打开一个阅读器:

oRS.Open oCmd, , adOpenForwardOnly, adLockReadOnly

之后,当 oRS 打开但在读取任何记录或值之前,我尝试使用以下行中的其中获取输出参数的值:

val1 = oCmd("@MyOutputParam")
val2 = oCmd("@MyOutputParam").Value
val3 = oCmd.Parameters("@MyOutputParam").Value

所有三个(val1、val2、val3)变量均为 DB NULL。

我已确认在查询分析器中运行 SP 会向 @MyOutputParam 参数返回一个值:

declare @p33 int
exec usp_GetResultAndOutput 1, 2, 3, @p33 output
select @p33

这将返回我的预期记录的记录集和在单行中显示数字的第二个记录集。

我什至尝试在尝试获取输出参数之前调用 rs.NextRecordset,但这不起作用。

我需要使用其他方法来处理输出参数吗?

我可以返回记录集和输出参数吗?

最佳答案

所有记录集都枚举到最后之前,无法检索输出参数。试想一下,客户端怎么可能在执行完成之前检索到参数的输出值? Execute() 调用只是开始执行,批处理继续在服务器上执行,直到返回所有结果。当客户端迭代 SELECT 生成的结果集时,批处理正在执行该 SELECT。输出参数的值仅在批处理结束时才知道。因此,在批处理完成之前不可能知道输出参数值,这意味着所有语句都已执行,这反过来又要求客户端消耗(迭代)所有结果集。

这是解析一组结果的规范形式:

do
{
while (rs.MoveNext)
{
// do something with the row
}
} while (Not rs.NextRecordset Is Nothing)
// now is safe to read the out param
response.write oCmd("@MyOutput")

关于sql-server - 为什么 adParamOutput 参数执行后不包含值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8057433/

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