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

问题描述 投票:0回答:2

我正在开发一个用 VB.NET 构建的 Windows 桌面应用程序,该应用程序与基于 Web 的数据库 (Microsoft SQL Server 2012) 交互。它在需要时连接到数据库并在本地执行一些计算。

现在,有一个从该 Windows 应用程序执行存储过程的新要求。我需要知道当我调用 SqlCommand.ExecuteNonQuery 时,SqlCommand 是立即释放还是等到存储过程完成所有工作?

我现在无法测试,因为存储过程尚未设计,并且至少需要 2 分钟才能完成。

我在与 UI 不同的线程上运行 SqlCommand.ExecuteNonQuery。

担心 SqlCommand 是否没有立即释放:

  1. 如果用户在完成之前退出应用程序,存储过程会完成其任务吗?
  2. 如果发生超时,存储过程会完成其任务吗?
sql sql-server vb.net sql-server-2012
2个回答
6
投票

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

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


0
投票

方法 ExecuteNonQuery 等待存储过程完成。返回将是一个整数,其中包含受影响的行数。

© www.soinside.com 2019 - 2024. All rights reserved.