为什么需要EndExecuteNonQuery()?

时间:2010-11-11 23:10:56

标签: c# sql-server asynchronous

文档here说明了

  开发人员必须致电   EndExecuteNonQuery方法完成   操作。

我无法找到一个很好的理由,为什么会这样,或者没有调用EndExecuteNonQuery的结果是什么。

如果不调用将会发生什么?我不想阻止它,有没有办法在AsyncCallback中自动调用它?

2 个答案:

答案 0 :(得分:4)

这将做的事情如下:

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

所以是的:做到了

答案 1 :(得分:1)

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

查看反射器中的代码,我们可以看到在EndExecuteNonQuery中关闭连接的痕迹:

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