如果浏览器对我的web应用程序关闭了一半,我会尝试停止将数据存储到数据库中。
例如:
单击提交按钮后,在此过程中,有人关闭浏览器窗口或互联网连接中断。我希望应用程序回滚所有提交的数据。是否可以在不更改存储过程中配置的情况下在应用程序中做到这一点?
发布于 2011-10-11 02:04:44
不--如果不创建最终的解决方案,这在任何正常的方式下都是不可能的。
通常,在这种情况下,数据是分阶段提交的。如果他们从未“完成”下一步,他们之前的数据将在以后的某个过程中删除。
发布于 2011-10-11 02:12:36
我可以建议一个基于Response.IsClientConnected
的想法,如果用户仍然连接的话。
我认为sql命令插入数据太快了,你永远也抓不到它,如果命令不是那么快,你可以试一试,尽管我建议找一个不同的方法来应用长时间的事务。此外,如果用户停止与页面的连接,也会抛出异常。
BEGIN Tran
...Sql Command...
if (Response.IsClientConnected)
{
...Commit....
}
else
{
...Rollback....
return;
}
发布于 2011-10-19 00:12:17
我很好奇您是如何执行数据访问的。如果你在使用.NET,我会对System.Transactions.TransactionScope()做一些研究。如前所述,这是sql中事务的替代方案,并且仅依赖于您的数据访问层实现(例如,实体框架或Linq to SQL与存储过程或纯T-SQL)
http://msdn.microsoft.com/en-us/library/system.transactions.transactionscope.aspx
除了这个建议之外,这取决于你作为开发人员来控制这样的边缘情况。例如,如果用户处于多步骤流程的中途;在这里,业务规则和用例定义了如何处理此类场景。实现事务性状态可能是一种选择,其中一些人忽略了废弃数据,另一些人则将其保存起来,以防用户返回。鉴于此,我想说这可能是一个设计问题,而不是开发问题。
我希望这能帮到你。干杯!
https://stackoverflow.com/questions/7720588
复制