K zachycení NÁVRATOVÉ HODNOTY (vrácené SQL pomocí syntaxe RETURN({číslo})) použijte:
cmdHeader.Parameters.Add("@ReturnValue", SqlDbType.Int, 4).Direction = ParameterDirection.ReturnValue;
Pravděpodobně byste také měli používat SCOPE_IDENTITY() místo @@IDENTITY
Upravit:
Váš sproc by tedy udělal něco jako:
DECLARE @NewId INTEGER
INSERT SomeTable(FieldA) VALUES ('Something')
SELECT @NewId = SCOPE_IDENTITY()
RETURN (@NewId)
A váš kód C# pro získání této hodnoty by byl:
int newId = cmdHeader.Parameters[@ReturnValue].value;
Úprava 2:
Dobře, původní otázka zmátla problém, protože "návratová hodnota" je něco jiného než to, co ve skutečnosti děláte, což je vracení sady výsledků s jedním sloupcem.
Takže místo toho NEDĚLEJTE vůbec přidat parametr ReturnValue. Stačí použít ExecuteScalar() pomocí původního nastavení SqlCommand, jak je uvedeno níže:
int newId = Convert.ToInt32(cmdHeader.ExecuteScalar());