2010-11-11 140 views
3

文档here指出为什么需要EndExecuteNonQuery()?

开发商必须调用 EndExecuteNonQuery方法完成 操作。

我一直没有找到一个很好的理由,为什么这是,或者什么结果不叫EndExecuteNonQuery是。

任何洞察,如果它不被称为会发生什么?我不想阻止它,有没有办法让它在AsyncCallback中被自动调用?

回答

4

这会做这样的事情:

  • 更新的参数值(出/返回)
  • 检查异常(在TDS流中的错误代码 - 违反约束等)
  • 发布的任何对象/数据作为缓冲以上等的一部分

所以,是的:做

1

根据定义,这样的异步调用不能在使用块中进行,以确保连接已关闭。因此,调用EndExecutexxx是必要的。

综观反射器的代码,我们可以看到在关闭了EndExecuteNonQuery连接的跟踪:

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

EndExecuteNonQuery不会关闭连接... – 2010-11-11 23:36:52

+0

有一点似乎做到这一点,请参阅我的更新。 – Aliostad 2010-11-12 00:36:27