2010-09-13 2 views
0

J'ai plusieurs procédures stockées dans ma base de données. Par exemple, une procédure de suppression stockée comme:ExecuteSprocAccessor ne fonctionne pas pour les opérations CUD?

alter procedure [dbo].[DeleteFactor] 
@Id uniqueidentifier 
as 
begin 
    delete from Factors where Id = @Id 
end 

Quand j'appelle cela de code comme ceci:

dc.ExecuteSprocAccessor("DeleteFactor", id); 

alors la ligne ne soit pas effacé. Toutefois, ce code fonctionne:

dc.ExecuteNonQuery("DeleteFactor", id); 

id est un passé en paramètre et du type Guid.

Quelqu'un peut-il expliquer pourquoi le second fonctionne et la première approche ne fonctionne pas? Je trouve cela assez étrange car la première méthode est clairement à utiliser avec des procédures stockées.

Répondre

0

Selon Retrieving Data as Objects, la méthode ExecuteSprocAccessor utilise l'exécution différée (ala LINQ). Ainsi, dans la première approche, puisque vous n'accédez pas aux résultats de la procédure stockée DeleteFactor, l'appel SQL n'est pas effectué.

Je voudrais utiliser la deuxième méthode de toute façon puisque vous exécutez vraiment une non-requête. En outre, la première approche peut conduire à une certaine confusion puisque le ExecuteSprocAccessor est conçu pour récupérer des données. par exemple. "Les données sont-elles censées être retournées ici? Peut-être que quelque chose a été manqué?"

+0

Merci pour la clarification. Peut-être que la dénomination de cette méthode devrait être révisée à quelque chose comme ExecuteSprocAccessorForRetrievingData –

0

Appelez simplement ToArray ou ToList sur le résultat de votre ExecuteSprocAccessor pour l'exécuter.

Questions connexes