Appliquer uniquement une seule ligne renvoyée par DataReader
Me semble que j'écris ce beaucoup dans mon code:
using (var reader = cmd.ExecuteReader())
{
if (reader.Read())
{
result = new User((int)reader["UserId"], reader["UserName"].ToString());
}
if (reader.Read())
{
throw new DataException("multiple rows returned from query");
}
}
Est-il intégré dans la façon de le faire que je ne le sais pas?
source d'informationauteur fearofawhackplanet | 2011-10-20
Vous devez vous connecter pour publier un commentaire.
Je ne sais pas, mais ce code peut être délégué dans une méthode d'extension:
à être utilisé comme cela:
En vous évitant la duplication de code.
Cela peut ou peut ne pas aider en fonction de ce que votre but est. Si vous avez besoin de détecter que plusieurs lignes ont été retournés pour lancer une exception appropriée, alors ce ne sera pas vous aider.
Si vous voulez juste pour s'assurer que seulement un résultat est retourné, vous pouvez potentiellement obtenir un rendement bosse à l'aide de cette méthode. Ce que je comprends, les fournisseurs de données peuvent utiliser pour optimiser la requête en prévision d'une seule ligne de résultat.
En tout cas, ce que vous voulez faire est d'utiliser SqlCommand.ExecuteReader pour créer votre lecteur de données, mais passer d'un argument à partir de la CommandBehavior énumération (plus précisément CommandBehavior.Commandbehavior). ExecuteReader est surchargé à l'accepter.
CommandBehavior enum
SqlCommand.ExecuteReader surcharge
De sorte que votre code pourrait ressembler à ceci:
Si vous utilisez sql pour récupérer votre e données cela peut vous aider en vous permettant de supprimer ce genre de code dans tous les cas, vous devez utiliser un lecteur de données.
EX:
Une autre astuce d'utiliser des procédures stockées, leur Utilisation pourrait réduire au minimum la répétition de la requête SQL et inutile de codage.