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 GOquesto 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!