slo*_*ife 4 sql-server ado asp-classic
我正在使用ASP经典与ADO,连接到SQL Server 2008.
我继承了这个代码并且它被破坏了,我将尝试重新创建相关的部分.如果您需要更多细节或我遗漏了一些东西,请告诉我.
我创建一个命令并添加参数
oCmd.CommandType = adCmdStoredProc
...
oCmd.Parameters.Append oCmd.CreateParameter("@MyOutputParam", adInteger, adParamOutput, 4, NULL)
Run Code Online (Sandbox Code Playgroud)
后来,我从该命令打开一个阅读器:
oRS.Open oCmd, , adOpenForwardOnly, adLockReadOnly
Run Code Online (Sandbox Code Playgroud)
此后,在ORS是开放的,但我读过的任何记录或值之前,我尝试使用,以获得输出参数的值一个低于行:
val1 = oCmd("@MyOutputParam")
val2 = oCmd("@MyOutputParam").Value
val3 = oCmd.Parameters("@MyOutputParam").Value
Run Code Online (Sandbox Code Playgroud)
所有三个(val1,val2,val3)变量都是DB NULL.
我已经确认在查询分析器中运行SP会向@MyOutputParam参数返回一个值:
declare @p33 int
exec usp_GetResultAndOutput 1, 2, 3, @p33 output
select @p33
Run Code Online (Sandbox Code Playgroud)
返回我的预期记录的记录集和第二个记录集,显示单行中的数字.
我甚至尝试在尝试获取输出参数之前调用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")
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
3162 次 |
最近记录: |