【问题标题】:get out parameter value of stored procedure in classic asp获取经典asp中存储过程的参数值
【发布时间】:2026-01-07 14:20:04
【问题描述】:

我正在使用经典的 asp 并使用存储过程。我必须得到存储过程输出参数的值。这是我的代码

    <% @LANGUAGE="VBSCRIPT" CODEPAGE="65001" %>
 <!-- METADATA TYPE="TypeLib" NAME="Microsoft ADO Type Library" UUID="{00000205-0000-0010-8000-00AA006D2EA4}" -->
<% 

Dim value
    Dim i

set con = Server.CreateObject("ADODB.Connection")
con.Open  "Provider=SQLOLEDB;Server=aliba\SQLEXPRESS;Database=dummySP;Trusted_Connection=Yes;"      
Set Comm = Server.CreateObject("ADODB.Command")
comm.ActiveConnection = con
comm.CommandText = "sp_dummy"
'comm.NamedParameters=true
comm.CommandType = adCmdStoredProc
comm.Parameters.Append comm.CreateParameter("@weight" , adVarchar,adParamInput, 50, "hello")
'comm.Parameters.Append comm.CreateParameter("PRODUCT", adVarchar, adParamInput,50, producttype )
'comm.Parameters.Append comm.CreateParameter("ACCOUNT", adVarchar, adParamInput,100, "" )


    comm.Parameters.Append comm.CreateParameter("@pris", adVarchar, adParamOutput,50)  'output parameters
    'i=comm.Execute
    comm.Execute
    value=comm.Parameters("@pris").Value
     Response.Write("Value is")
    Response.Write(value)

pris 的值没有显示在输出中。我不知道这有什么问题。

我点击了这个链接(Calling SQL Stored Procedure with Output Parameter in VBScript)但没有成功

它给了我以下错误

值是

响应对象错误 'ASP 0185 : 8002000e'

缺少默认属性

/StoreProcedure.asp,第 0 行

找不到对象的默认属性。

这是我的存储过程

 ALTER procedure [dbo].[sp_dummy]
  @weight nvarchar(50),
  @pris nvarchar(50)= null out
  as
  begin

  select @pris = pris from sp_dummy_table where weight= @weight
  end

【问题讨论】:

  • ADODB.Command 运行Execute() 方法之前,您无法获取adParamOutput 参数的值。 Execute*() 必须运行以从存储过程中检索输出并填充参数。我认为错误是因为您的value= 行不正确,请将其移至comm.execute 下面并尝试value = comm.Parameters("Pris").Value。还要记住.Append所有参数按存储过程期望的顺序,否则你会遇到问题。
  • @Lankymart 我只是按照你说的做了,但仍然给我同样的错误。
  • 我是否需要添加其他内容,只需编辑代码
  • 如果您发布存储过程定义而不是全部内容,这将有所帮助ALTER PROCEDURE [schema.name] @parameter1, @parameter2, ... AS 将帮助我锻炼您需要的明智参数定义(假设您使用的是 SQL Server) i>.
  • 是的,我正在使用 SQL 服务器并上传了 SP

标签: stored-procedures vbscript asp-classic out-parameters


【解决方案1】:

我建议您使用 SELECT 关闭您的 SP,这样您就可以从 Recordset 中获取值。

SELECT OutPRIS=@pris

然后在你的 ASP 代码中:

Set rsComm = comm.Execute
If Not rsComm.EOF Then
    myPRIS = rsComm.Fields("OutPRIS").Value
Else
    myPRIS = Null
End If
rsComm.Close
Set rsComm = Nothing

希望这会有所帮助。

【讨论】:

  • 那么使用输出参数你只是用一种方法代替另一种方法有什么意义。
  • 我提出了我首选的、已知良好的方法的建议。它满足了返回值的目标。我不确定我是否同意提供替代方案实际上是否值得“投反对票”。
  • 它不是“已知的好”实际上比只返回一个输出变量效率低。 OP 方法没有任何问题,只需要确保正确执行即可。
  • 事实上,它是“众所周知的”,因为它的功能是众所周知的。我不能争辩效率,但我可以争辩说我没有使用这种方法解决这个问题。我没有说 OP 方法有什么问题:我提供了一个替代方案,我认为这是合适的。不确定如果有人对你提供的不符合他们对有效方法的狭隘看法的答案投反对票,你会觉得自己是评判者。请注意,这仍然是提供的唯一答案。
  • 更容易假设是我,因为我评论这取决于你,事实上我得到了很多反对票,虽然我不觉得他们有道理,但其他人感觉不同,所以我继续用它。替代方案很好,但 OP 询问 out 参数,这完全改变了上下文。你返回的是一个单行单列记录集,这不是一回事。当您想要返回一些数据以及设置输出参数时会发生什么?