是否存在任何不正当关闭应用程序的事件?

时间:2013-03-01 17:21:13

标签: c# wpf sql-server-2008

我有wpf,c#,sql express应用程序,这意味着带有数据库的软件。假设我有一个标签项,标签项内有数据网格。从一个数据网格我购买员工并将其放入篮子数据网格。假设在我的主数据网格中有10支铅笔,我买了5.现在它在主数据网格中是5,在篮子数据网格中是5。在我按下购买按钮之前,它将保留在购物篮中。 现在我的问题是,假设电力下降,我的申请被关闭。初始化后,我的主数据网格为5,Basket为0。所以我正在失去我在篮子里的东西。我可以在关闭应用程序或关闭标签项时管理它。但是,当应用程序关闭不当时,无法管理它。在c#中有没有任何机制,方法,事件来处理这个问题? 我知道你们大多数人都会说使用交易,我将在下一个版本中使用,这将不会很快。现在我想找到如何处理这个与交易。 我希望你明白我的意思。有什么想法吗?

这里的例子  假设你的库存中有12支笔和15支铅笔(主数据网格)。你卖的是2支钢笔和5支铅笔。当你在销售时,它将转向篮子数据网格。现在在主数据网格中有10支钢笔和10支铅笔。在篮子里2笔和5支铅笔。如果我没有点击提交按钮,它将不会被记录在销售数据库中。假设我正在工作并且从库存中销售物品并且电力下降。在我的库存中有10支钢笔和10支铅笔。篮子是空的。它没有记录在销售数据库中,因为没有点击按钮

2 个答案:

答案 0 :(得分:0)

最简单的方法是在添加项目时在数据库中设置脏标志以及篮子的详细信息。

然后当结账过程完成时清除脏标志。

然后当您重新启动应用程序时,请检查此标志。如果它很清楚,那么你可以从头开始。如果已设置,则撤回篮子的细节并按需要处理。

它不是很干净,但它可以完成工作。

答案 1 :(得分:0)

所以我仍然不确定你的代码是如何工作的,但我会给你两种方式的答案:

  1. 如果您只存储数据库中的库存数据(主网格中的数据),那么当应用程序关闭时,您将丢失篮子中的所有内容,因为内存丢失。如果是这种情况,您唯一的解决方案是将数据存储在数据库的篮子中。

  2. 如果您将库存和购物篮数据存储在数据库中,那么您可以使用以下代码:

  3. 
        update inventory
        update basket
    

    如果您的问题是应用程序在这两行代码之间被强行关闭,那么唯一的解决方案是添加一个事务范围:

    start transaction
    update inventory
    update basket
    end transaction
    

    这是确保数据安全的唯一方法。

    如果您遇到案例1,您应该实施解决方案,但这实际上会带您进入案例2.所以我建议您不要等到下一个版本才能实现事务范围。

    我希望这会有所帮助。