Visualizzazione dei risultati da 1 a 7 su 7
  1. #1

    [ASP] Valore di ritorno di una stored procedure

    Salve a tutti, ho postato raramente qui, spero che possiate aiutarmi a risolvere questo problema.
    Mi trovo a sviluppare un applicativo web in classic asp che si interfaccia ad un db SQL su Server 2008 SP1. Dovrei utilizzare alcune utili stored procedure e per gestire gli eventuali errori devo intercettare il loro valore di ritorno. Come indicato da MS in questa pagina, uso la seguente sintassi per chiamare la sp e prendere il valore di ritorno:
    Codice PHP:
    <%
    Set cn Server.CreateObject("ADODB.Connection")
    Set cmd Server.CreateObject("ADODB.Command")
    cn.Open "data source name""userid""password"
    Set cmd.ActiveConnection cn
    cmd
    .CommandText "sp_test"
    cmd.CommandType adCmdStoredProc
    ' Ask the server about the parameters for the stored proc'
    cmd.Parameters.Refresh
    ' Assign a value to the 2nd parameter.'
    ' Index of 0 represents first parameter.'
    cmd.Parameters(1) = 11
    cmd
    .Execute
    %>
    Calling via method 1

    ReturnValue 
    = <% Response.Write cmd.Parameters(0) %> 
    Il valore di ritorno si trova quindi in cmd.Parameters(0).
    Per quanto riguarda invece le stored procedure gli errori vengono gestiti n questo modo:
    Codice PHP:
    DELETE FROM table WHERE condition

    IF @@ERROR <> 0
    BEGIN
        RAISERROR
    ('ERROR in delete from table'11)
        RETURN (-
    1)
    END 
    In effetti con una stored procedure come la precedente, cioè contenente solo una query, chiamandola dalla pagina asp, in caso di errore mi ritrovo in cmd.Parameters(0) proprio il valore corretto, cioè -1. Se invece la stored procedure contiene più di una query, come la seguente, anche in caso di errore in cmd.Parameters(0) non c'è nulla (anzi IsEmpty(cmd.Parameters(0)) è True).
    Codice PHP:
    BEGIN TRAN

    DELETE FROM table1 WHERE condition

    IF @@ERROR <> 0
    BEGIN
        RAISERROR
    ('ERROR in delete from table1'11)
        
    ROLLBACK TRAN
        
    RETURN (-1)
    END

    DELETE FROM table2 WHERE condition

    IF @@ERROR <> 0
    BEGIN
        RAISERROR
    ('ERROR in delete from table2'11)
        
    ROLLBACK TRAN
        
    RETURN (-1)
    END

    COMMIT TRAN 
    In una sp come la precedente direi che è fondamentale intercettare l'errore per informare della riuscita o meno della transazione, ma il valore di ritorno per qualche motivo non c'è e non riesco a capire cosa c'è che non va.
    Ho provato chissà quante volte e in tutti i modi a chiamare la stored procedure, a cambiare il codice all'interno della stored procedure, ma senza venirne a capo. Ho googlato anche un bel po' in cerca di qualche suggerimento ma niente. Siete la mia ultima spiaggia...

    Un grazie in anticipo e un saluto alla sezione!

  2. #2
    ovviamente sei sicuro al 100% che la SP vada in errore! ma io farei un'ulteriore prova, aggiungendo alla fine della SP (dopo la COMMIT) un RETURN(2) e ispezionandolo in asp, tanto per essere sicuri al 200% che la SP vada davvero in errore


  3. #3
    Originariamente inviato da optime
    ovviamente sei sicuro al 100% che la SP vada in errore! ma io farei un'ulteriore prova, aggiungendo alla fine della SP (dopo la COMMIT) un RETURN(2) e ispezionandolo in asp, tanto per essere sicuri al 200% che la SP vada davvero in errore

    sì la sp va in errore perchè eseguendola con gli stessi parametri direttamente dal tool di sql server 2008 mi restituisce l'errore...

  4. #4
    hai comunque provato a fare il tentativo che ti ho suggerito? risultato?

  5. #5
    Originariamente inviato da optime
    hai comunque provato a fare il tentativo che ti ho suggerito? risultato?
    sì ho appena (ri)provato... nada

  6. #6
    puoi postare la SP reale?

  7. #7
    risolto!

    commentando la riga RAISERROR('ERROR', 16, 1) da asp prendo correttamente il valore di ritorno.... stavo impazzendo dietro questo problema. non ci avevo proprio pensato, anche perchè l'ho utilizzato con un'altra applicazione asp.net ed era tutto ok...

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2026 vBulletin Solutions, Inc. All rights reserved.