Aby przechwycić WARTOŚĆ ZWRACANA (zwracaną przez SQL przy użyciu składni RETURN({liczba})) użyj:
cmdHeader.Parameters.Add("@ReturnValue", SqlDbType.Int, 4).Direction = ParameterDirection.ReturnValue;
Ponadto prawdopodobnie powinieneś używać SCOPE_IDENTITY() zamiast @@IDENTITY
Edytuj:
Więc Twój sproc zrobiłby coś takiego:
DECLARE @NewId INTEGER
INSERT SomeTable(FieldA) VALUES ('Something')
SELECT @NewId = SCOPE_IDENTITY()
RETURN (@NewId)
Twój kod C# do pobrania tej wartości to:
int newId = cmdHeader.Parameters[@ReturnValue].value;
Edytuj 2:
Ok, pierwotne pytanie myliło problem, ponieważ „wartość zwracana” to coś innego niż to, co faktycznie robisz, czyli zwracanie zestawu wyników w pojedynczej kolumnie.
Więc zamiast tego NIE dodaj w ogóle parametr ReturnValue. Po prostu użyj ExecuteScalar() używając oryginalnej konfiguracji SqlCommand, jak poniżej:
int newId = Convert.ToInt32(cmdHeader.ExecuteScalar());