Для захвата ВОЗВРАЩАЕМОГО ЗНАЧЕНИЯ (возвращаемого SQL с использованием синтаксиса RETURN ({число})) используйте:
cmdHeader.Parameters.Add("@ReturnValue", SqlDbType.Int, 4).Direction = ParameterDirection.ReturnValue;
Кроме того, вам, вероятно, следует использовать SCOPE_IDENTITY () вместо @@ IDENTITY
Edit:
Таким образом, ваш sproc будет делать что-то вроде:
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());