2010-11-11 9 views
3

La documentation here stipule quePourquoi EndExecuteNonQuery() est-il nécessaire?

développeurs doivent appeler la méthode de EndExecuteNonQuery pour terminer l'opération.

Je n'ai pas été en mesure de trouver une bonne raison pour laquelle cela est, ou ce que les résultats de ne pas appeler EndExecuteNonQuery sont.

Un aperçu de ce qui se passera si elle n'est pas appelée? Je ne veux pas bloquer, y a-t-il un moyen de l'appeler automatiquement dans un AsyncCallback?

Répondre

4

Cela fera des choses comme:

  • valeurs des paramètres de mise à jour (aller/retour)
  • vérification des exceptions (codes d'erreur dans le flux TDS - violation de contrainte etc) libération
  • tous les objets/données en mémoire tampon dans le cadre de ce qui précède etc

Alors oui: le faire

1

Par définition, une De tels appels asynchrones ne peuvent pas être faits dans un bloc utilisant pour s'assurer que la connexion est fermée. En tant que tel, appelez EndExecutexxx est nécessaire.

En regardant le code dans le réflecteur, on peut voir trace de fermer la connexion à EndExecuteNonQuery:

SqlDataReader reader = this.CompleteAsyncExecuteReader(); 
if (reader != null) 
{ 
     reader.Close(); 
} 
+0

EndExecuteNonQuery ne peut pas fermer la connexion ... –

+0

Il y a un peu qui semblent le faire, voir ma mise à jour. – Aliostad

Questions connexes