За да заснемете ВЪЗРАЩАНА СТОЙНОСТ (връщана от SQL с помощта на синтаксиса RETURN({number})), използвайте:
cmdHeader.Parameters.Add("@ReturnValue", SqlDbType.Int, 4).Direction = ParameterDirection.ReturnValue;
Освен това вероятно трябва да използвате SCOPE_IDENTITY() вместо @@IDENTITY
Редактиране:
Значи вашият proc ще направи нещо като:
DECLARE @NewId INTEGER
INSERT SomeTable(FieldA) VALUES ('Something')
SELECT @NewId = SCOPE_IDENTITY()
RETURN (@NewId)
И вашият C# код за извличане на тази стойност би бил:
int newId = cmdHeader.Parameters[@ReturnValue].value;
Редактиране 2:
Добре, първоначалният въпрос обърка проблема, тъй като „връщаната стойност“ е нещо различно от това, което всъщност правите, което връща набор от резултати от една колона.
Така че вместо това НЕ добавете параметър ReturnValue изобщо. Просто използвайте ExecuteScalar() като използвате оригиналната си настройка на SqlCommand, както следва:
int newId = Convert.ToInt32(cmdHeader.ExecuteScalar());