Per acquisire un VALORE RETURN (restituito da SQL utilizzando la sintassi RETURN({number})) utilizzare:
cmdHeader.Parameters.Add("@ReturnValue", SqlDbType.Int, 4).Direction = ParameterDirection.ReturnValue;
Inoltre, probabilmente dovresti usare SCOPE_IDENTITY() invece di @@IDENTITY
Modifica:
Quindi il tuo sproc farebbe qualcosa del tipo:
DECLARE @NewId INTEGER
INSERT SomeTable(FieldA) VALUES ('Something')
SELECT @NewId = SCOPE_IDENTITY()
RETURN (@NewId)
E il tuo codice C# per recuperare quel valore sarebbe:
int newId = cmdHeader.Parameters[@ReturnValue].value;
Modifica 2:
Ok, la domanda originale ha confuso il problema in quanto il "valore di ritorno" è una cosa diversa da ciò che stai effettivamente facendo, ovvero restituire un set di risultati a colonna singola.
Quindi, invece NON aggiungere un parametro ReturnValue. Basta usare ExecuteScalar() utilizzando la configurazione originale di SqlCommand come di seguito:
int newId = Convert.ToInt32(cmdHeader.ExecuteScalar());