Salve a tutti,
sto sviluppando un software in C# che utilizza stored procedure MS SQL Server.
nella stored procedure che segue ho due parametri di OUTPUT che mi restituiscono l'esito dell'operazione.
Se avvio la stored da Management Studio i valori sono corretti, ma se utilizzo la stored da ADO.NET i parametri mi danno sempre lo stesso valore anche se l'esito è negativo.
La stored è questa:
ALTER PROCEDURE [dbo].[csp_BIO_Scheda_Materie_Prime_Insert]
(
	@DATA_OP DATE,
	@ID_MATERIA_PRIMA INT,
	@UM_PRODOTTO TINYINT=NULL,
	@QTA_PRODOTTO DECIMAL(10,2)=NULL,
	@TIPO_AGRICOLTURA CHAR(1)=NULL,
	@NUM_DOC VARCHAR(20)=NULL,
	@DATA_DOC DATE=NULL,
	@ID_FORNITORE VARCHAR(8)=NULL,
	@ROWS_INSERTED INT OUTPUT,
	@ERROR_DETAILS VARCHAR(500) OUTPUT
	
)
AS
BEGIN
	-- SET NOCOUNT ON added to prevent extra result sets from
	-- interfering with SELECT statements.
	SET NOCOUNT ON;
	

	BEGIN TRY
		INSERT INTO BIO_SCHEDE_MATERIE_PRIME
		SELECT @DATA_OP,@ID_MATERIA_PRIMA,@UM_PRODOTTO,@QTA_PRODOTTO,@TIPO_AGRICOLTURA,@NUM_DOC,@DATA_DOC,@ID_FORNITORE

		 
		SELECT @ROWS_INSERTED = @@ROWCOUNT
	END TRY
	
	BEGIN CATCH

		SELECT   
         @ERROR_DETAILS = 'Dettagli errore-> Numero:' + CAST(ERROR_NUMBER() AS varchar(10)) + ' Motivo:' + ERROR_MESSAGE();

	END CATCH
END
GO
questo il codice che richiama la stored

var lstParams = new List<SqlParameter>();
                var objResult = new C_OPERATION_RESULT();

                string sqlquery = "csp_BIO_Scheda_Materie_Prime_Insert";

                lstParams.Add(new SqlParameter("@DATA_OP", objModel.DATA_OP.ToShortDateString()));
                lstParams.Add(new SqlParameter("@ID_MATERIA_PRIMA", objModel.MATERIA_PRIMA_Selected.ID_PRODOTTO));
                lstParams.Add(new SqlParameter("@UM_PRODOTTO", objModel.UM_MATERIA_PRIMA_Selected.ID_UM_PRODOTTO));
                lstParams.Add(new SqlParameter("@QTA_PRODOTTO", objModel.QTA_PRODOTTO));
                lstParams.Add(new SqlParameter("@TIPO_AGRICOLTURA", objModel.TIPO_AGRICOLTURA));
                lstParams.Add(new SqlParameter("@NUM_DOC", objModel.NUM_DOC));
                lstParams.Add(new SqlParameter("@DATA_DOC", objModel.DATA_DOC.ToShortDateString()));
                lstParams.Add(new SqlParameter("@ID_FORNITORE", objModel.FORNITORE_Selected.ID_FORNITORE));
                lstParams.Add(new SqlParameter("@ROWS_INSERTED", ParameterDirection.Output));
                lstParams.Add(new SqlParameter("@ERROR_DETAILS", ParameterDirection.Output));

                //dichiaro tipi dato per i parametri output
                lstParams[8].SqlDbType = SqlDbType.Int;
                lstParams[9].SqlDbType = SqlDbType.VarChar;
                lstParams[9].Size = 500;
i parametri di OUTPUT li recupero così:
 
                   int rows = Convert.ToInt32(cmd.Parameters["@ROWS_INSERTED"].Value);
                   string errdetails = Convert.ToString(cmd.Parameters["@ERROR_DETAILS"].Value);
ho omesso il codice di chiamata, i valori di OUTPUT rows e errdetails mi restituiscono sempre gli stessi valori,
ovvero rows=2 , e errdetails = "Output"(????)

avete idee a riguardo?

grazie mille!