Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/sql-server/25.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
SqlCommand.ExecuteOnQuery是否等待存储过程完成?_Sql_Sql Server_Vb.net_Sql Server 2012 - Fatal编程技术网

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

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之外的另一个线程上运行

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

如果未立即释放SqlCommand,则会出现以下问题: 1.如果用户在完成之前退出应用程序,存储过程是否会完成工作? 2.如果发生超时,存储过程是否会完成工作


抱歉,如果我的怀疑是基本的,我是新手。

是的,ExecuteOnQuery将等待SP完成或出现错误


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

方法ExecuteOnQuery将等待存储过程完成。返回值将是包含受影响行数的整数。

谢谢Steve。这正是我不想要的,也就是说,如果用户关闭应用程序,我不想向SP发出cancel命令。有可能实现这一点吗?您并不是真的发出cancel命令,只是您的连接被禁止断开,这会告诉数据库,而数据库会尝试结束附加到该连接的进程。为了防止出现这种情况,您应该隐藏应用程序,直到所有线程完成,然后关闭应用程序。