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 がありますが、サンプル コードでは、戻り値に "RetValue" を指定し (これで問題ありません)、SessionIDも戻り値として2 つのパラメーターを指定しています。その 2 番目は必要で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 に答える