För att fånga ett RETURN VALUE (returnerat av SQL med syntaxen RETURN({number})) använd:
cmdHeader.Parameters.Add("@ReturnValue", SqlDbType.Int, 4).Direction = ParameterDirection.ReturnValue;
Dessutom bör du förmodligen använda SCOPE_IDENTITY() istället för @@IDENTITY
Redigera:
Så din sproc skulle göra något i stil med:
DECLARE @NewId INTEGER
INSERT SomeTable(FieldA) VALUES ('Something')
SELECT @NewId = SCOPE_IDENTITY()
RETURN (@NewId)
Och din C#-kod för att hämta det värdet skulle vara:
int newId = cmdHeader.Parameters[@ReturnValue].value;
Redigera 2:
Ok, den ursprungliga frågan förvirrade problemet eftersom "avkastningsvärdet" är en annan sak än vad du faktiskt gör, vilket är att returnera resultat från en enda kolumn.
Så istället GÖR INTE lägg till en ReturnValue-parameter överhuvudtaget. Använd bara ExecuteScalar() med din ursprungliga SqlCommand-inställning enligt nedan:
int newId = Convert.ToInt32(cmdHeader.ExecuteScalar());