【问题标题】:Does SqlCommand.ExecuteNonQuery waits till completion of stored procedure?SqlCommand.ExecuteNonQuery 是否等到存储过程完成?
【发布时间】:2014-04-01 20:19:59
【问题描述】:

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

如果没有立即释放 SqlCommand 的担忧: 1.如果用户在完成之前退出应用程序,sproc会完成工作吗? 2.如果超时,sproc会结束工作吗?

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

【问题讨论】:

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


    【解决方案1】:

    是的,ExecuteNonQuery 将等到 SP 完成或出错。

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

    【讨论】:

    • 谢谢史蒂夫。这正是我不想要的,即如果用户关闭应用程序,我不想向 SP 发出取消命令。有没有可能做到这一点?
    • 您并没有真正发出取消,只是您的连接被强制断开,这告诉数据库并且数据库试图结束附加到该连接的进程。为防止这种情况发生,您应该隐藏您的应用程序,直到所有线程完成,然后关闭您的应用程序。
    【解决方案2】:

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

    【讨论】:

      猜你喜欢
      • 2022-01-06
      • 2021-10-14
      • 1970-01-01
      • 1970-01-01
      • 2014-03-31
      • 1970-01-01
      • 2011-01-30
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多