我正在开发一个用VB.NET构建的Windows桌面应用程序,它与基于Web的数据库(Microsoft SQL Server 2012)连接。它在需要时连接到数据库并在本地执行一些计算。 现在,有一个新的要求从这个Windows应用程序执行一个sproc。我需要知道,当我调用SqlCommand.ExecuteNonQuery时,SqlCommand是立即释放还是等待直到sproc完成所有工作? 我现在无法测试,因为存储过程尚未设计,并且至少需要2分钟才能完成。 我在与UI不同的线程上运行SqlCommand.ExecuteNonQuery。
关注SqlCommand是否未立即释放: 1.如果用户在完成之前退出应用程序,那么sproc finish会完成吗? 2.如果发生超时,sproc完成是否有效?
对不起,如果我的疑问是基本的,我是新手。
答案 0 :(得分:6)
是的,ExecuteNonQuery将等待SP完成或错误。
如果从另一个线程运行ExecuteNonQuery,则只有该线程在等待。其他线程不是这样,用户可以关闭应用程序。如果你在关闭之前清理线程,就像你应该的那样,它将向SP发送取消。 (这并不意味着它实际上会取消。如果它几乎完成,它可能会完成。)然后会发生什么事情取决于您的SQL开发人员。如果他们在事务中运行SP,他们应该回滚更改并返回错误。如果没有,请找一位新的SQL开发人员。
答案 1 :(得分:0)
ExecuteNonQuery方法等待存储过程完成。返回值将是一个整数,其中包含受影响的行数。