【问题标题】:ASP Classic vbScript - Execute SQL stored procedure with recordset and returned valuesASP Classic vbScript - 使用记录集和返回值执行 SQL 存储过程
【发布时间】:2019-11-22 12:47:09
【问题描述】:

我正在尝试使用输入参数、返回的记录集和返回参数执行存储过程。当我转到 asp 页面时,我收到 500 错误。存储过程本身在 SQL Server 中按预期运行。你能说出下面代码中的错误在哪里吗?

    ' The following line must be changed to reflect your data source info
   Conn.Open "Data Source=path; Initial Catalog=database;","username","password"
   set cmd = Server.CreateObject("ADODB.Command")
   set cmd.ActiveConnection = Conn
  ' Specify the name of the stored procedure you wish to call
    cmd.CommandText = "ap_RF_085"
    cmd.CommandType = adCmdStoredProc

  ' Use the values from the table in the following lines to define parameters
    cmd.Parameters.Append cmd.CreateParameter("@RETURN_VALUE", adInteger, adParamReturnValue)
    cmd.Parameters.Append cmd.CreateParameter("@Whse_Loc", adVarChar, adParamInput, 6)
    cmd.Parameters.Append cmd.CreateParameter("@Whse_Zone", adVarChar, adParamInput, 6)
    cmd.Parameters.Append cmd.CreateParameter("@Width_Char", adVarChar, adParamInput, 5)
    cmd.Parameters.Append cmd.CreateParameter("@Height_Char", adVarChar, adParamInput, 5)
    cmd.Parameters.Append cmd.CreateParameter("@Depth_Char", adVarChar, adParamInput, 5)
    cmd.Parameters.Append cmd.CreateParameter("@Type", adVarChar, adParamInput, 1)
    cmd.Parameters.Append cmd.CreateParameter("@Site", adVarChar, adParamInput, 8)
    cmd.Parameters("@Whse_Loc") = "4H"
    cmd.Parameters("@Whse_Zone") = ""
    cmd.Parameters("@Width_Char") = ""
    cmd.Parameters("@Height_Char") = ""
    cmd.Parameters("@Depth_Char") = ""
    cmd.Parameters("@Type") = ""
    cmd.Parameters("@Site") = ""
    cmd.Parameters("@Whse_Loc") = ""
    cmd.Parameters("@Whse_Loc") = "MZ"
    SET rs = cmd.Execute
    returned = cmd.parameters("@RETURN_VALUE").value

    RESPONSE.WRITE(returned)

感谢您的帮助!

我将代码更新为以下建议。我仍然收到 500 错误。 IE11 中的选项卡也显示“正在等待 [serverName]”。你能从代码中说出为什么没有正确传递吗?

cmd.Parameters.Append cmd.CreateParameter("@RETURN_VALUE", adInteger, adParamReturnValue)
    cmd.Parameters.Append cmd.CreateParameter("@Whse_Loc", adVarChar, adParamInput, 6)
    cmd.Parameters.Append cmd.CreateParameter("@Whse_Zone", adVarChar, adParamInput, 6)
    cmd.Parameters.Append cmd.CreateParameter("@Width_Char", adVarChar, adParamInput, 5)
    cmd.Parameters.Append cmd.CreateParameter("@Height_Char", adVarChar, adParamInput, 5)
    cmd.Parameters.Append cmd.CreateParameter("@Depth_Char", adVarChar, adParamInput, 5)
    cmd.Parameters.Append cmd.CreateParameter("@Type", adVarChar, adParamInput, 1)
    cmd.Parameters.Append cmd.CreateParameter("@Site", adVarChar, adParamInput, 8)
    cmd.Parameters("@Whse_Loc") = "4H"
    cmd.Parameters("@Whse_Zone") = ""
    cmd.Parameters("@Width_Char") = ""
    cmd.Parameters("@Height_Char") = ""
    cmd.Parameters("@Depth_Char") = ""
    cmd.Parameters("@Type") = ""
    cmd.Parameters("@Site") = ""
    cmd.Parameters("@Whse_Loc") = ""
    cmd.Parameters("@Whse_Loc") = "MZ"
    SET rs = cmd.Execute
    IF NOT rs.EOF THEN data = rs.GETROWS()
    CALL rs.CLOSE()
    returned = cmd.parameters("@RETURN_VALUE").value

【问题讨论】:

  • 在关闭记录集之前不能访问返回参数。最简单的方法是使用GetRows() 将记录集存储到二维数组中,然后关闭记录集。
  • 感谢您的回复。其他页面有很好的信息。我还遇到的是,当我运行页面时,我在 ie11 的选项卡中得到“等待 [serverName]”。你能在代码中看到任何可能导致问题的地方吗?
  • 不客气,希望对您有所帮助。

标签: sql-server stored-procedures vbscript asp-classic


【解决方案1】:

请试试这个:程序

DECLARE @RETURN_VALUE XXXXXX = NULL 
OUTPUT ASP file SET cmd = server.CreateObject("ADODB.command") 
cmd.ActiveConnection = conn cmd.CommandText = "" cmd.CommandType = 4 cmd.CommandTimeout = 3000 cmd.Parameters.refresh 
cmd.Execute returned = cmd.Parameters.item("@RETURN_VALUE") 
& "" RESPONSE.WRITE(returned) 
cmd.close 
Set cmd = Nothing

【讨论】:

  • 您好,@220!您可能需要考虑格式化您的答案,并将代码包含在一个块中。您可以通过正确缩进并插入换行符,然后选择代码并按键盘上的 control-K 来做到这一点。这会将代码放在自己的块中,同时保留格式。否则,您可能会发现代码对读者来说并不能真正理解并且您的答案可能不会被接受,即使它可能是一个好的答案。干杯!
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-05-06
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-01-04
相关资源
最近更新 更多