Det ville være rart at kunne undgå at oprette et command object bare for at aflæse en return value, og så vidt jeg har kunnet læse i MSDN Library så er det heller ikke det primære formål med objektet.
I dette særtema ser vi på, hvordan cloud og AI bliver fundamentet for virksomhedernes digitale forretning, og hvordan de nye muligheder for automatisering og forretningsværdi kan udnyttes uden at miste overblik, sikkerhed og menneskelig kontrol.
Jeg plejer at gøre det gennem et standard record med Set RS = Conn.Execute(\"MyProc \'Param1\', \'Param2\')
Her er et par eksempler på hvordan MyProc kunne se ud for at den returnerer et record/recordset.
CREATE PROCEDURE MyProc @param1 varchar(64) AS -- Her returneres enten indholdet af @RetNoItems eller @RetItems. -- I eks. ASP kan retur værdien hentes med RS(\"vcRetVal\") DECLARE @CountItems int; DECLARE @RetNoItems varchar(32); DECLARE @RetItems varchar(32); SET @RetNoItems = \'Der blev ikke fundet en disse\'; SET @RetItems = \'Der blev vidst fundet flere stk.\'; SELECT @CountItems = COUNT(DISTINCT ID) FROM tbItems WHERE vcType = @param1; IF @CountItems = 0 BEGIN SELECT @RetNoItems AS vcRetVal; END ELSE BEGIN SELECT @RetItems AS vcRetval; END GO
CREATE PROCEDURE MyProc @param1 varchar(64) AS -- Her returneres et reelt recordset SELECT * FROM tbItems WHERE vcType = @param1; GO
Ja, nemt nok at hente et recordset, men hvis man bare skal bruge en statusværdi for om operationen er gået godt/skidt, så er return values den \"rigtige\" måde at gøre det på.
Man kunne selvfølgelig bare \"returnere\" et recordset med statusværdien, men jeg tænkte på om man ikke kan få hentet \"return value\" uden at skabe det ekstra Command/Recordset objekt?
Jo det er en ren kosmetisk løsning og der bliver instantieret et recordset hvilket er et problem på eks. en NT/4 hvorimod det ikke betyder det store på en NT/2000 med mindre command/connection-timeout for connection er sat til ekstraordinært højt.
Nu vi er ved det, så skulle recordset-objektet gerne slette sig selv så snart kommandoen er udført, da der jo ikke er nogen reference til det. Den gør det i hvert tilfælde på NT/2000, men jeg har ikke testet det på NT4
Eh, giver RETURN 10 ikke en returværdi som kan bruges direkte ? Response.Write(Conn.Execute(\"MyProc \'param1\'))
CREATE PROCEDURE MyProc @param1 varchar(64) AS -- Her returneres et reelt recordset IF @param1 = \'no habla espanol\' BEGIN RETURN 1 END ELSE BEGIN RETURN 0 END GO
Tag en ekstre lang jakke og et fake-mustage (med briller selvfølgeligt) på. Gå så ned i den nærmeste boghandel og lad som om du leder efter en bestemt bog imens du i \"Davis Sussman\'s bog ADO 2.6 Programmeres Reference\" bladrer dig frem til løsningen. Hvis en af ekspedienterne fatter mistanke, så binder du ham/hende med dit fake-mustage og stikker af med den side fra bogen hvor løsningen står.
Hvis det ikke er 15 point værd, så ved jeg ikke hvad der er ;o)
En anden mulighed er selvfølgeligt at spørge din kollega hvordan man gør - hvis han ellers har bogen... men man skal jo ikke altid springe over hvor gæret er lavest, så jeg holder på at du forbereder dig på den første mulighed.
Takker, så er det da min første \"gode joke\" ever ;o)
Synes godt om
Ny brugerNybegynder
Din løsning...
Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.