Może to, ale nie musi pomóc, w zależności od celu. Jeśli chcesz wykryć, że zwrócono wiele wierszy w celu wygenerowania odpowiedniego wyjątku, to nie pomoże.
Jeśli chcesz tylko upewnić się, że zwracany jest tylko jeden wynik, możesz potencjalnie uzyskać efekt wydajności za pomocą tej metody. Z tego co rozumiem, dostawcy danych mogą wykorzystać to do zoptymalizowania zapytania w oczekiwaniu na wynik w jednym wierszu.
W każdym razie, należy użyć SqlCommand.ExecuteReader, aby utworzyć swój czytnik danych, ale przekazać argument z wyliczenia CommandBehavior (w szczególności CommandBehavior.SingleRow). ExecuteReader jest przeciążony, aby to zaakceptować.
CommandBehavior enum
SqlCommand.ExecuteReader overload
Więc twój kod może wyglądać następująco:
using (var reader = cmd.ExecuteReader(CommandBehavior.SingleRow))
{
if (reader.Read())
{
result = new User((int)reader["UserId"], reader["UserName"].ToString());
}
}
Może jeśli masz kontrolę nad kwerendy, można zrobić 'top 1 'w nim .. Jeśli chcesz sprawdzić integralność bazy danych, może powinieneś umieścić 'UNIKALNY INDEKS 'w kolumnach zapytania" WHERE ", zamiast tego zrobić. –
Co powiesz o dodaniu TOP 1 do zapytania sql? – Stecya
Nie chcę TOP 1, chcę wyjątek. To nie jest to samo. – fearofawhackplanet