Để nắm bắt GIÁ TRỊ TRỞ LẠI (do SQL trả về bằng cú pháp RETURN ({number})), hãy sử dụng:
cmdHeader.Parameters.Add("@ReturnValue", SqlDbType.Int, 4).Direction = ParameterDirection.ReturnValue;
Ngoài ra, bạn có thể nên sử dụng SCOPE_IDENTITY () thay vì @@ IDENTITY
Chỉnh sửa:
Vì vậy, mầm của bạn sẽ làm một cái gì đó như:
DECLARE @NewId INTEGER
INSERT SomeTable(FieldA) VALUES ('Something')
SELECT @NewId = SCOPE_IDENTITY()
RETURN (@NewId)
Và mã C # của bạn để truy xuất giá trị đó sẽ là:
int newId = cmdHeader.Parameters[@ReturnValue].value;
Chỉnh sửa 2:
Được rồi, câu hỏi ban đầu đã nhầm lẫn vấn đề vì "giá trị trả về" là một thứ khác với những gì bạn đang thực sự làm là trả về một tập kết quả một cột.
Vì vậy, thay vào đó KHÔNG NÊN thêm một tham số ReturnValue nào cả. Chỉ cần sử dụng ExecuteScalar () sử dụng thiết lập SqlCommand ban đầu của bạn như bên dưới:
int newId = Convert.ToInt32(cmdHeader.ExecuteScalar());