Om een RETURN VALUE vast te leggen (geretourneerd door SQL met gebruik van de RETURN({number}) syntaxis) gebruik:
cmdHeader.Parameters.Add("@ReturnValue", SqlDbType.Int, 4).Direction = ParameterDirection.ReturnValue;
U zou waarschijnlijk ook SCOPE_IDENTITY() moeten gebruiken in plaats van @@IDENTITY
Bewerken:
Dus je sproc zou zoiets doen als:
DECLARE @NewId INTEGER
INSERT SomeTable(FieldA) VALUES ('Something')
SELECT @NewId = SCOPE_IDENTITY()
RETURN (@NewId)
En uw C#-code om die waarde op te halen zou zijn:
int newId = cmdHeader.Parameters[@ReturnValue].value;
Bewerken 2:
Ok, de oorspronkelijke vraag bracht het probleem in de war omdat de "retourwaarde" iets anders is dan wat u feitelijk doet, namelijk het retourneren van een resultatenset met één kolom.
Dus in plaats daarvan NIET voeg überhaupt een ReturnValue-parameter toe. Gebruik gewoon ExecuteScalar() met uw originele SqlCommand-configuratie zoals hieronder:
int newId = Convert.ToInt32(cmdHeader.ExecuteScalar());