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:Il valore di ritorno si trova quindi in cmd.Parameters(0).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) %>
Per quanto riguarda invece le stored procedure gli errori vengono gestiti n questo modo: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:DELETE FROM table WHERE condition
IF @@ERROR <> 0
BEGIN
RAISERROR('ERROR in delete from table', 1, 1)
RETURN (-1)
END
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.Codice PHP:BEGIN TRAN
DELETE FROM table1 WHERE condition
IF @@ERROR <> 0
BEGIN
RAISERROR('ERROR in delete from table1', 1, 1)
ROLLBACK TRAN
RETURN (-1)
END
DELETE FROM table2 WHERE condition
IF @@ERROR <> 0
BEGIN
RAISERROR('ERROR in delete from table2', 1, 1)
ROLLBACK TRAN
RETURN (-1)
END
COMMIT TRAN
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!![]()



Rispondi quotando
