SqlCommand.ExecuteOnQuery是否等待存储过程完成?
我正在开发一个在VB.NET中构建的Windows桌面应用程序,该应用程序与基于web的数据库(Microsoft SQL Server 2012)交互。它在需要时连接到数据库,并在本地执行一些计算。 现在,有一个新的需求,需要从这个Windows应用程序执行存储过程。我需要知道,当我调用SqlCommand.ExecuteOnQuery时,SqlCommand是立即释放还是等待存储过程完成所有工作? 我现在无法测试,因为存储过程尚未设计,至少需要2分钟才能完成。 我在UI之外的另一个线程上运行SqlCommand.ExecuteOnQuery 如果未立即释放SqlCommand,则会出现以下问题: 1.如果用户在完成之前退出应用程序,存储过程是否会完成工作? 2.如果发生超时,存储过程是否会完成工作SqlCommand.ExecuteOnQuery是否等待存储过程完成?,sql,sql-server,vb.net,sql-server-2012,Sql,Sql Server,Vb.net,Sql Server 2012,我正在开发一个在VB.NET中构建的Windows桌面应用程序,该应用程序与基于web的数据库(Microsoft SQL Server 2012)交互。它在需要时连接到数据库,并在本地执行一些计算。 现在,有一个新的需求,需要从这个Windows应用程序执行存储过程。我需要知道,当我调用SqlCommand.ExecuteOnQuery时,SqlCommand是立即释放还是等待存储过程完成所有工作? 我现在无法测试,因为存储过程尚未设计,至少需要2分钟才能完成。 我在UI之外的另一个线程上运行
抱歉,如果我的怀疑是基本的,我是新手。是的,ExecuteOnQuery将等待SP完成或出现错误
如果从另一个线程运行ExecuteOnQuery,则只有该线程在等待。其他线程不是这样,因此用户可以关闭应用程序。如果您在关闭前清理线程(您应该这样做),它将向SP发送一个取消消息(这并不意味着它实际上会取消。如果它几乎完成,它可能会完成)。然后发生什么取决于SQL开发人员。如果在事务中运行SP,则应回滚更改并返回错误。如果没有,请找一个新的SQL开发人员。方法ExecuteOnQuery将等待存储过程完成。返回值将是包含受影响行数的整数。谢谢Steve。这正是我不想要的,也就是说,如果用户关闭应用程序,我不想向SP发出cancel命令。有可能实现这一点吗?您并不是真的发出cancel命令,只是您的连接被禁止断开,这会告诉数据库,而数据库会尝试结束附加到该连接的进程。为了防止出现这种情况,您应该隐藏应用程序,直到所有线程完成,然后关闭应用程序。