Um einen RÜCKGABEWERT (zurückgegeben von SQL unter Verwendung der RETURN({number})-Syntax) zu erfassen, verwenden Sie:
cmdHeader.Parameters.Add("@ReturnValue", SqlDbType.Int, 4).Direction = ParameterDirection.ReturnValue;
Außerdem sollten Sie wahrscheinlich SCOPE_IDENTITY() verwenden statt @@IDENTITÄT
Bearbeiten:
Dein Sproc würde also so etwas tun:
DECLARE @NewId INTEGER
INSERT SomeTable(FieldA) VALUES ('Something')
SELECT @NewId = SCOPE_IDENTITY()
RETURN (@NewId)
Und Ihr C#-Code zum Abrufen dieses Werts wäre:
int newId = cmdHeader.Parameters[@ReturnValue].value;
Änderung 2:
Ok, die ursprüngliche Frage hat das Problem verwirrt, da der "Rückgabewert" etwas anderes ist als das, was Sie tatsächlich tun, nämlich eine Ergebnismenge mit einer einzigen Spalte zurückzugeben.
Also nicht Fügen Sie überhaupt einen ReturnValue-Parameter hinzu. Verwenden Sie einfach ExecuteScalar() Verwenden Sie Ihr ursprüngliches SqlCommand-Setup wie folgt:
int newId = Convert.ToInt32(cmdHeader.ExecuteScalar());