如何避免由于软件设计不当而导致的未限制事务导致SQL Server挂起
问题:一个.NET应用程序试图将许多记录保存到SQL Server。使用了BeginTrans,在提交之前,会向最终用户显示一条警告消息,以确认是否继续保存数据。用户只需离开电脑就可以离开 现在所有其他用户都无法访问锁定的记录。有时几乎整个系统都会受到影响。几乎所有的交易都在更新相同的记录;确认消息必须在数据更新之后和提交之前显示,以便用户可以回滚。最好的解决方案是什么 如果找不到解决方案,我可能做的最后一件事是回滚,显示确认消息,如果用户接受,我将再次保存数据,而不显示任何确认消息(我的方式不正确)如何避免由于软件设计不当而导致的未限制事务导致SQL Server挂起,sql,.net,sql-server,transactions,Sql,.net,Sql Server,Transactions,问题:一个.NET应用程序试图将许多记录保存到SQL Server。使用了BeginTrans,在提交之前,会向最终用户显示一条警告消息,以确认是否继续保存数据。用户只需离开电脑就可以离开 现在所有其他用户都无法访问锁定的记录。有时几乎整个系统都会受到影响。几乎所有的交易都在更新相同的记录;确认消息必须在数据更新之后和提交之前显示,以便用户可以回滚。最好的解决方案是什么 如果找不到解决方案,我可能做的最后一件事是回滚,显示确认消息,如果用户接受,我将再次保存数据,而不显示任何确认消息(我的方式不
我的问题是:我能做的最好的是什么?有什么想法吗?这听起来像WinForms应用程序?听起来您还想确认用户操作的意图。只有在他们确认要保存数据后,您才能启动交易吗 理想情况下,你应该
编辑:在理解了下面评论中提到的细节之后,我建议使用某种形式的服务器端任务队列,所有这些请求都需要通过该队列。客户机将向服务器提交请求,然后服务器应用程序将成为负责更新数据库中记录的软件。客户将向此应用程序发出请求,并将按照收到的顺序进行处理。我对库存跟踪软件没有太多经验,但我知道它必须绝对正确。所以这只是一个粗略的想法,我相信有更多库存跟踪经验的人会有更好的模式。建议的模式在负责更新记录的服务器上造成了一个很大的瓶颈。例如,对于像亚马逊这样的人来说,这种模式会很糟糕。谢谢,没错,它的winform应用程序,但不幸的是,我必须先更新,然后才能向用户显示是否继续的确认信息。该应用程序是一个库存管理,在我保存现金账单后,我需要检查项目期末余额是否为负数,在某些情况下,用户将接受并继续,他们只需要确认是否继续。因此,我无法提前知道库存中剩余的SKU,因为其他用户也会输入现金账单。听起来您需要某种类型的服务器端任务队列,该队列在应用程序的所有运行实例中共享。将编辑答案