Dav*_*ott 5 sql-server vbscript adodb asp-classic
我想从经典 ASP 中的存储过程中获取返回码和结果集。
CREATE PROCEDURE CheckEmployeeId
@EmployeeName nvarchar(255)
AS
BEGIN
SET NOCOUNT ON;
DECLARE
@Exists INT
, @RowCount Int = 0
, @ReturnValue Int = 1
SELECT EmployeeId FROM Employees WHERE Name = @EmployeeName
set @RowCount = @@ROWCOUNT
if (@RowCount <> 1)
BEGIN
SET @ReturnValue = 2
END
ELSE
BEGIN
SET @ReturnValue = 1
END
RETURN @ReturnValue
END
Run Code Online (Sandbox Code Playgroud)
所以在 ASP 我可以执行以下操作来获取返回值
Set cmd = CreateObject("ADODB.Command")
with cmd
.ActiveConnection = cnnstr
.CommandType = adCmdStoredProc
.CommandText = "CheckEmployeeId"
.Parameters.Refresh
.Parameters("@EmployeeName") = EmployeeName
end with
cmd.Execute()
RetVal = cmd.Parameters("@RETURN_VALUE")
Run Code Online (Sandbox Code Playgroud)
或者这个得到结果集。
Set cmd = CreateObject("ADODB.Command")
with cmd
.ActiveConnection = cnnstr
.CommandType = adCmdStoredProc
.CommandText = "CheckEmployeeId"
.Parameters.Refresh
.Parameters("@EmployeeName") = EmployeeName
Set rst = .Execute()
end with
Run Code Online (Sandbox Code Playgroud)
有没有办法同时获得?
您已经在这样做了,只需将两者结合起来即可。
Set cmd = CreateObject("ADODB.Command")
with cmd
.ActiveConnection = cnnstr
.CommandType = adCmdStoredProc
.CommandText = "CheckEmployeeId"
.Parameters.Refresh
.Parameters("@EmployeeName") = EmployeeName
Set rst = .Execute()
end with
'You will need to close the Recordset before returning the RETURN_VALUE.
RetVal = cmd.Parameters("@RETURN_VALUE")
Run Code Online (Sandbox Code Playgroud)
您无需选择其中之一,它们是相互独立的。唯一的问题是它们返回的顺序,请记住,在所有返回的记录集关闭之前,OUTPUT和RETURN值都将无法访问。
就我个人而言,我更喜欢通过将它们存储为二维数组来立即关闭它们。
Set cmd = CreateObject("ADODB.Command")
with cmd
.ActiveConnection = cnnstr
.CommandType = adCmdStoredProc
.CommandText = "CheckEmployeeId"
.Parameters.Refresh
.Parameters("@EmployeeName") = EmployeeName
Set rst = .Execute()
If Not rst.EOF Then data = rst.GetRows()
Call rst.Close()
end with
RetVal = cmd.Parameters("@RETURN_VALUE")
'Access Recordset array
If IsArray(data) Then
'Return first column, first row.
Response.Write data(0, 0)
End If
Run Code Online (Sandbox Code Playgroud)