J'utilise LINQ to SQL pour appeler des sprocs dans mon entreprise. Normalement, cela fonctionne très bien mais sur certaines requêtes, si rien n'est trouvé, une exception SqlException "No Records Found" sera lancée.Comment gérer le SqlException "No Records Found" lors de l'utilisation de LINQ to SQL?
Comment dois-je gérer ce cas?
Voici un exemple d'appel que je ferais:
/// <summary>
/// Gets the pending messages.
/// </summary>
/// <param name="historySearchCriteria">The history search criteria.</param>
/// <returns><c>List</c> of pending messages.</returns>
public List<PendingMessage> GetPendingMessages(HistorySearchCriteria historySearchCriteria)
{
using (MessageDataContext db = new MessageDataContext(DatabaseProperties.MessageConnectionString))
{
List<PendingMessage> pendingMessages = new List<PendingMessage>();
pendingMessages.AddRange(db.usp_search_message_pending(historySearchCriteria.AccountId,
historySearchCriteria.TrackingNumber,
historySearchCriteria.StartDateTime,
historySearchCriteria.EndDateTime)
.Select(p => new PendingMessage()
{
Account = p.account,
ActionType = (OrderActionType) Enum.Parse(typeof(OrderActionType), p.action_type.ToString()),
AttemptsRemaining = p.attempts_remaining,
Message = p.message
}));
return pendingMessages;
}
}
Quelle est la meilleure façon de gérer le fait que je veux simplement retourner une liste vide si aucun enregistrement se trouvent.
Je viens de le tester et il jette encore le SqlException "Non Enregistrements trouvés ". – Velicoraptor
Essayez d'ajouter DefaultIfEmpty avant AddRange et voyez ce qui se passe. –
Je peux me tromper (souvent, je suis!) Mais le libellé de la question m'amène à penser que le sproc lance l'exception. Si c'est le cas, le résultat ne sera jamais 'vide', mais sera une exception. Donc, sans changer le sproc, cette exception doit être attrapée comme dans ma réponse. –