Questo può o non può aiutare a seconda di quale sia il tuo obiettivo. Se è necessario rilevare che sono state restituite più righe per generare un'eccezione appropriata, non sarà di aiuto.
Se si desidera solo assicurarsi che venga restituito un solo risultato, è possibile ottenere un aumento delle prestazioni utilizzando questo metodo. Da quello che ho capito, i fornitori di dati possono utilizzare questo per ottimizzare la query in previsione di un risultato di una singola riga.
In ogni caso, ciò che si vorrebbe fare è utilizzare SqlCommand.ExecuteReader per creare il proprio lettore di dati, ma passare un argomento dall'enumerazione CommandBehavior (in particolare CommandBehavior.SingleRow). ExecuteReader è sovraccarico per accettarlo.
CommandBehavior enum
SqlCommand.ExecuteReader overload
Quindi il codice potrebbe essere simile a questo:
using (var reader = cmd.ExecuteReader(CommandBehavior.SingleRow))
{
if (reader.Read())
{
result = new User((int)reader["UserId"], reader["UserName"].ToString());
}
}
Forse se si ha il controllo della query, si può fare un 'TOP 1' in esso .. Se vuoi verificare l'integrità del tuo database, forse dovresti mettere un 'UNICO INDICE' contro le colonne della tua query 'WHERE' di te invece di farlo. –
Cosa ne pensi di aggiungere TOP 1 alla tua query sql? – Stecya
Non voglio un TOP 1, voglio un'eccezione. Non sono affatto la stessa cosa. – fearofawhackplanet