For at indfange en RETURN VALUE (returneret af SQL ved hjælp af RETURN({number}) syntaksen), skal du bruge:
cmdHeader.Parameters.Add("@ReturnValue", SqlDbType.Int, 4).Direction = ParameterDirection.ReturnValue;
Du bør sandsynligvis også bruge SCOPE_IDENTITY() i stedet for @@IDENTITY
Rediger:
Så din sproc ville gøre noget som:
DECLARE @NewId INTEGER
INSERT SomeTable(FieldA) VALUES ('Something')
SELECT @NewId = SCOPE_IDENTITY()
RETURN (@NewId)
Og din C#-kode til at hente denne værdi ville være:
int newId = cmdHeader.Parameters[@ReturnValue].value;
Rediger 2:
Ok, det oprindelige spørgsmål forvirrede problemet, da "afkastværdien" er en anden ting end det, du rent faktisk gør, hvilket er at returnere et enkelt kolonneresultatsæt.
Så LÆG IKKE i stedet tilføje en ReturnValue parameter overhovedet. Brug bare ExecuteScalar() ved at bruge din originale SqlCommand-opsætning som nedenfor:
int newId = Convert.ToInt32(cmdHeader.ExecuteScalar());