Điều này có thể hoặc có thể không giúp tùy thuộc vào mục tiêu của bạn. Nếu bạn cần phát hiện ra rằng nhiều hàng đã được trả lại để ném một ngoại lệ thích hợp, thì điều này sẽ không giúp ích gì.
Nếu bạn chỉ muốn đảm bảo rằng chỉ có một kết quả được trả lại, bạn có thể có khả năng gặp phải tình trạng hoạt động bằng cách sử dụng phương pháp này. Từ những gì tôi hiểu, các nhà cung cấp dữ liệu có thể sử dụng điều này để tối ưu hóa truy vấn với dự đoán một kết quả hàng đơn.
Trong mọi trường hợp, những gì bạn sẽ muốn làm là sử dụng SqlCommand.ExecuteReader để tạo trình đọc dữ liệu của bạn, nhưng chuyển một đối số từ liệt kê CommandBehavior (cụ thể là CommandBehavior.SingleRow). ExecuteReader bị quá tải để chấp nhận điều này.
CommandBehavior enum
SqlCommand.ExecuteReader overload
Vì vậy, mã của bạn có thể trông như thế này:
using (var reader = cmd.ExecuteReader(CommandBehavior.SingleRow))
{
if (reader.Read())
{
result = new User((int)reader["UserId"], reader["UserName"].ToString());
}
}
Có lẽ nếu bạn có quyền kiểm soát các truy vấn, bạn có thể làm một 'TOP 1' trong nó .. Nếu bạn muốn kiểm tra tính toàn vẹn của cơ sở dữ liệu, có lẽ bạn nên đặt một 'UNIQUE INDEX' so với các cột trong câu lệnh' WHERE' của bạn thay vì làm điều này. –
Điều gì về việc thêm TOP 1 vào truy vấn sql của bạn? – Stecya
Tôi không muốn TOP 1, tôi muốn có ngoại lệ. Họ không giống nhau chút nào. – fearofawhackplanet