sql - SqlCommand.ExecuteNonQuery 是否会等到存储过程完成?

标签 sql sql-server vb.net sql-server-2012

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

关注 SqlCommand 是否未立即释放: 1. 如果用户在完成之前退出应用程序,存储过程会完成工作吗? 2. 如果超时,存储过程是否会完成?

抱歉,如果我的疑问本质上是基本的,我是新手。

最佳答案

是的,ExecuteNonQuery 将等待,直到 SP 完成或出现错误。

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

关于sql - SqlCommand.ExecuteNonQuery 是否会等到存储过程完成?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22796080/

相关文章:

sql-server - 如何在 SSIS 中实现 TRY_CONVERT 功能?

sql - 优化 WHERE 子句中包含许多 OR 语句的查询

.net - 在当前行的开头插入字符 (vb.net)

c# - 使用C#比较本地数据库的两个表

sql - Access 在 SQL View 中给出错误,但查询运行正确

sql - 如何计算 Postgres 图中所有连接的节点(行)?

mysql - 在这种情况下如何进行多选操作?

sql-server - SQL Server Management Studio 中的 "Favorites"或 "macros"?

mysql - 在 Crystal 报表上选择mysql连接

asp.net - 在 asp.net 应用程序中管理与数据库的连接