2010-11-11 4 views
3

В документации говорится, что hereЗачем нужен EndExecuteNonQuery()?

разработчики должны вызвать метод EndExecuteNonQuery закончить Операцию.

Я не смог найти вескую причину, почему это так, или какие результаты не вызывают EndExecuteNonQuery.

Любое понимание того, что произойдет, если оно не будет вызвано? Я не хочу блокировать его, есть ли способ, чтобы он автоматически вызывался в AsyncCallback?

ответ

4

Это будет делать такие вещи, как:

  • значений параметров обновления (из/возврата)
  • проверки для исключений (кодов ошибок в потоке TDS - нарушение ограничений и т.д.) выпуска
  • любые объекты/данные буферном как часть выше и т.д.

так что да: сделать это

1

По определению, ll такие асинхронные вызовы не могут быть сделаны в блоке использования, чтобы убедиться, что соединение закрыто. Таким образом, необходимо вызвать EndExecutexxx.

Глядя на код в отражатель, мы можем видеть следы закрытия соединения в EndExecuteNonQuery:

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

EndExecuteNonQuery не закроет соединение ... –

+0

Существует немного, что, кажется, это сделать, см мое обновление. – Aliostad

Смежные вопросы