SqlCommand.ExecuteNonQuery是否等待存储过程完成?

Pra*_*pta 4 sql vb.net sql-server sql-server-2012

我正在开发一个用VB.NET构建的Windows桌面应用程序,它与基于Web的数据库(Microsoft SQL Server 2012)连接.它在需要时连接到数据库并在本地执行一些计算.现在,有一个新的要求从这个Windows应用程序执行一个sproc.我需要知道,当我调用SqlCommand.ExecuteNonQuery时,SqlCommand是立即释放还是等待直到sproc完成所有工作?我现在无法测试,因为存储过程尚未设计,并且至少需要2分钟才能完成.我在一个单独的线程上运行SqlCommand.ExecuteNonQuery而不是UI.

如果SqlCommand没有立即释放,则会产生以下问题:1.如果用户在完成之前退出应用程序,那么sproc完成是否有效?2.如果发生超时,sproc完成是否有效?

对不起,如果我的疑问是基本的,我是新手.

Ste*_*eve 6

是的,ExecuteNonQuery将等待SP完成或错误.

如果从另一个线程运行ExecuteNonQuery,则只有该线程在等待.其他线程不是这样,用户可以关闭应用程序.如果你在关闭之前清理线程,就像你应该的那样,它将向SP发送取消.(这并不意味着它实际上会取消.如果它几乎完成,它可能会完成.)然后会发生什么事情取决于您的SQL开发人员.如果他们在事务中运行SP,他们应该回滚更改并返回错误.如果没有,请找一位新的SQL开发人员.

  • 您实际上并没有发出取消,只是您的连接被强行断开了,这告诉数据库,并且数据库试图结束连接到该连接的进程。为避免这种情况,您应该隐藏您的应用程序,直到所有线程完成,然后关闭您的应用程序。 (2认同)