Toon posts:

[ASP/SQL] Stored procedure: Output parameter én Recordset

Pagina: 1
Acties:

Verwijderd

Topicstarter
Ik heb een sp die een Output parameter retourneert én een Recordset (indien er records aanwezig zijn).

code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
'COMMAND
Set comUser = Server.CreateObject("ADODB.Command")
With comUser
    .CommandText = "spUserGet"
    .CommandType = 4                            'Type : stored procedure
    .ActiveConnection = conn.ConnectionString
End With

'PARAMETERS
Set paraError   = comUser.CreateParameter("@ErrorCode", 3, 2)
comUser.Parameters.Append paraError
'PARAMETERS INPUT
comUser.Parameters.Append comUser.CreateParameter("@Login", 200, 1, 50, Login)
comUser.Parameters.Append comUser.CreateParameter("@Password", 200, 1, 50, Password)

'EXECUTE COMMAND
comUser.Execute

if paraError.Value = 0 Then
    Set objRS = comUser.Execute
    ' RECORDSET GEBRUIKEN
else
    ' FOUTMELDING TONEN
end if


Het probleem van deze code is dat de sp 2x aangeroepen wordt.

Een andere optie:

code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
'COMMAND
Set comUser = Server.CreateObject("ADODB.Command")
With comUser
    .CommandText = "spUserGet"
    .CommandType = 4                            'Type : stored procedure
    .ActiveConnection = conn.ConnectionString
End With

'PARAMETERS
Set paraError   = comUser.CreateParameter("@ErrorCode", 3, 2)
comUser.Parameters.Append paraError
'PARAMETERS INPUT
comUser.Parameters.Append comUser.CreateParameter("@Login", 200, 1, 50, Login)
comUser.Parameters.Append comUser.CreateParameter("@Password", 200, 1, 50, Password)

'EXECUTE COMMAND
Set objRS = comUser.Execute

dim arData
    if not objRS.eof then
        arData = objRS.GetRows
    end if
objRS.close


Maar deze valt over objRS.eof: Operation is not allowed when the object is closed. (Ik krijg nl. niet altijd een Recordset terug).

Ik heb gelezen dat ik bij een Output parameter én Recordset altijd eerst de Recordset moet uitlezen en closen voordat ik de Output parameter controleer. Maar als de Recordset er niet is kom ik niet zo ver...

Ik hoor graag jullie suggesties.

Verwijderd

Topicstarter
Als ik de tweede optie verder uitwerk en de state controleer van de Recordset:

code:
1
2
3
4
5
6
7
8
Set objRS = comUser.Execute

if objRS.State = 1 Then
   ' REST VAN DE CODE UITVOEREN
else
   ' ER IS GEEN RECORDSET, DUS ER MOET EEN FOUTMELDING ZIJN
   Response.Write(paraError.Value)
end if


... dan krijg ik de Output parameters niet door.

Schijnbaar moeten alle Recordsets gesloten worden voordat de Output parameters uitgelezen kunnen worden:
You need to realize: a stored procedure must return all resultsets BEFORE
returning any output or return parameters. This means you must completely
process all returned recordsets (usually by closing them) before attempting
to read the output or return parameters.
(bron)

In het eerste voorbeeld is er nog geen sprake van een Recordset als ik de Output parameter uitlees, de Recordet maak ik nl. pas later aan. In het tweede voorbeeld heb ik wel een Recordset. Deze zou ik dan moeten sluiten, maar dat kan niet omdat er geen Recordset wordt gereturned...

..help?