Untuk menangkap RETURN VALUE (dikembalikan oleh SQL menggunakan sintaks RETURN({number})), gunakan:
cmdHeader.Parameters.Add("@ReturnValue", SqlDbType.Int, 4).Direction = ParameterDirection.ReturnValue;
Selain itu, Anda mungkin harus menggunakan SCOPE_IDENTITY() bukannya @@IDENTITY
Sunting:
Jadi sproc Anda akan melakukan sesuatu seperti:
DECLARE @NewId INTEGER
INSERT SomeTable(FieldA) VALUES ('Something')
SELECT @NewId = SCOPE_IDENTITY()
RETURN (@NewId)
Dan kode C# Anda untuk mengambil nilai itu adalah:
int newId = cmdHeader.Parameters[@ReturnValue].value;
Sunting 2
Oke, pertanyaan awal membingungkan masalah karena "nilai pengembalian" adalah hal yang berbeda dengan apa yang sebenarnya Anda lakukan yang mengembalikan satu kolom hasil.
Jadi, alih-alih JANGAN tambahkan parameter ReturnValue sama sekali. Cukup gunakan ExecuteScalar() menggunakan pengaturan SqlCommand asli Anda seperti di bawah ini:
int newId = Convert.ToInt32(cmdHeader.ExecuteScalar());