1

我无法在经典的 asp 代码中使用以下存储过程。它应该返回数据行。我会很感激你的帮助。谢谢

代码:

Set cmdSessionProc = Server.CreateObject("ADODB.Command")
cmdSessionProc.ActiveConnection = conn
cmdSessionProc.CommandText = "GetDetails"
cmdSessionProc.CommandType = adCmdStoredProc
    cmd.Parameters.Append cmd.CreateParameter("RetVal", adInteger, adParamReturnValue)
cmdSessionProc.Parameters.Append 
   cmdSessionProc.CreateParameter "SessionID", adInteger, adParamReturnValue 
cmdSessionProc("SessionID")= required data value (int)
cmdSessionProc.execute


ALTER Procedure [xxxxxxx].[GetDetails]
(@ID   int)
AS
    SELECT  *
    FROM [xxxtablexxx] 
    WHERE [ID] = @ID
4

3 回答 3

1

在经典 VB 中,Execute返回一个ADODB.Recordset. 你可以阅读它:

Set rstRecordSet = cmdSessionProc.execute
For i = 1 To rstRecordSet.RecordCount
    MsgBox rstRecordSet.Fields(0).Name & "=" & rstRecordSet.Fields(0)
    rstRecordSet.MoveNext
Next
rstRecordSet.Close

MSDN 上有很好的例子。

于 2013-01-04T15:51:35.863 回答
0

除了 Andomar 对实际阅读结果集的回答之外,我注意到您还有其他一些问题。

  • 您使用 xxxxxxx 掩盖了存储过程的架构。如果架构不是连接字符串中指定的用户的默认值(通常是 dbo),您还应该在 CommandText 中指定架构,即cmdSessionProc.CommandText = "xxxxxxx.GetDetails". 实际上,无论如何,您都应该始终指定架构,而不是出于性能原因让它默认。
  • 您的存储过程有 1 个参数 @ID,但您的示例代码指定了 2 个参数,“RetValue”作为返回值(没关系)和 SessionID也作为返回值。第二个必须是adParamInput并且名称必须与存储的过程的参数名称匹配(因为您不必按照与过程中相同的顺序创建参数)。事实上,我相信你也需要在字符串中加入 @ 符号。cmdSessionProc.Parameters.Append cmdSessionProc.CreateParameter "@ID", adInteger, adParamInput
于 2013-01-04T16:34:02.567 回答
0

我为所有页面创建了一个函数,即使是标准查询或 SP,我也使用这种方法。试试这个,希望它对你有用。

dsn = "" 'your SQL connection param
Set conn = Server.CreateObject("ADODB.Connection") 
Set rs = Server.CreateObject("ADODB.Recordset")
conn.mode = 3
conn.Open dsn
sql = "exec GetDetails 'yourparam1','yourparam2'"
rs.open sql, conn
'codes to manage the results here
'......
于 2013-01-04T17:40:19.873 回答