2013-03-01 71 views
-1

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

这里的例子 假设你在你的股票(主数据网格)中给了12支钢笔和15支铅笔。你从你的股票出售2笔和5支铅笔。而当你销售它将会去篮子数据网格。现在在主数据网格中有10支笔和10支铅笔。在篮子2笔和5支铅笔。如果我不点击提交按钮,它不会被记录在销售数据库中。假设我正在工作,销售库存和电力的项目下降。我的股票中有10支笔和10支铅笔。篮子是空的。并且它不记录在销售数据库中,因为未点击按钮

+0

这可能不是您要查找的内容,但您可以使用备用电池并立即将所有内容刷新到磁盘并在电源出现故障时正常关闭。 – 2013-03-01 17:24:06

+0

因此,您更新DataGrid值(并从数据库中删除项目),但Basket中的内容未保存在数据库中?这是你目前在做什么? – 2013-03-01 17:24:30

+1

你的问题不清楚。这些数据与应用程序流程以一种奇怪的方式结束有什么关系? – 2013-03-01 17:25:03

回答

0

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

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

然后,当您重新启动应用程序检查此标志。如果清楚的话,你可以从头开始。如果它已经设置好,然后拉回篮子的细节并处理它,但是你需要。

这不是很干净,但它会完成工作。

+0

非常好的解释,你向我展示了很好的方向。但现在的问题是如何检索篮子的细节? – 2013-03-02 05:37:11

+0

@FirdavsKurbonov - 您需要将它们存储在应用程序的会话/调用之间的某个地方。这可能是本地存储或甚至数据库。 – ChrisF 2013-03-02 11:30:28

+0

我将为篮子创建临时表并在应用程序启动时检查它,如果有项目返回到主数据网格。谢谢你的帮助。 – 2013-03-02 17:52:15

0

所以我现在还不能完全确定这是如何工作在你的代码,但我会告诉你答案了两种方式:

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

  2. 如果存储机器人的库存和在DB篮下的数据,那么你有一些这样的代码:


    update inventory 
    update basket 

如果你的问题是应用程序这两个之间强行关闭行代码,那么唯一的解决办法是增加一个事务范围:

start transaction 
update inventory 
update basket 
end transaction 

这是为了确保数据安全的唯一途径。

如果您处于案例1中,您应该实施该解决方案,但实际上这会为您带来案例2.因此,我建议您不要等到下一个版本实施事务处理范围。

我希望这会有所帮助。

+0

感谢您的评论我会考虑。 – 2013-03-02 17:51:21

相关问题