Salve a tutti, sto facendo un gestionale di magazzino, e sto curando la procedura di scarico.
Ho fatto una stored procedure semplicissima, che non si occupa di salvare i dati, ma semplicemente di pescare il record di scarico salvato e di affibiargli un numero progressivo (inizialmente salvo il record con numero=0). Passo come parametri l'ID del record del documento (pk) e il l'ID del tipo documento (ci possono essere documenti di tipo diverso, con numerazioni diverse).
Lo scopo è ripescare come parametro di ritorno il numero di documento salvato
La procedura è la seguente:
Da vb 2010, questo è il codice per ripescare il parametro di ritornocodice:ALTER PROCEDURE AGGIORNA_PROGRESSIVO @IDDOCUMENTO INT, @IDTIPODOCUMENTO INT, @NUMERODOC INT OUTPUT AS BEGIN SET NOCOUNT ON; SET TRANSACTION ISOLATION LEVEL SERIALIZABLE BEGIN TRANSACTION UPDATE Documenti.Scarico SET NUMERO = (SELECT MAX(NUMERO)+1 FROM DOCUMENTI.Scarico WHERE IDTIPODOCUMENTO=@IDTIPODOCUMENTO) WHERE ID=@IDDOCUMENTO AND NUMERO = 0 COMMIT SELECT @NUMERODOC = NUMERO FROM DOCUMENTI.Scarico WHERE ID=@IDDOCUMENTO RETURN @NUMERODOC END
ritorno è un variabile contenete l'ID del documento appena salvato. Non vi posto il codice di salvataggio, tanto quello funziona.codice:Function Salva() as integer Dim Cmd As New SqlClient.SqlCommand Cmd.CommandType = CommandType.StoredProcedure Cmd.Connection = cnConnessione Cmd.CommandText = "AGGIORNA_PROGRESSIVO" Dim p As New SqlClient.SqlParameter("NUMERODOC", SqlDbType.Int) p.Direction = ParameterDirection.ReturnValue Cmd.Parameters.Add(p) Cmd.Parameters.AddWithValue("IDDOCUMENTO", ritorno) Cmd.Parameters.AddWithValue("IDTIPODOCUMENTO", IDTIPODOCUMENTO) Cmd.ExecuteNonQuery() Return Cmd.Parameters("NUMERODOC").Value End Function
Ecco il problema: da codice mi dice che la procedura necessita di un valore per NUMERODOC, ma se provo ad eseguire la stored dal management studio, funziona, fa l'update e mi ritorna il parametro di ritorno.
Cosa c'è che non va?
E il tipo di transazione? Il programma verrà usato da più pc, è ho pensato che isolare la procedura quando viene chiamata poteva essere una buona soluzione per ritrovarmi con numeri di documento doppi o tripli o peggio.

?
Rispondi quotando