0

我们正在开发一个 RetailPOS .net (windows) 应用程序。

一位客户问“突然断电时,应用程序中正在处理的当前数据会发生什么?”,“应用程序能否恢复未保存的数据?”

我想知道,如何将这个功能包含在 .net 应用程序中?

有人可以帮助我,为此需要做些什么?

4

6 回答 6

4

首先,查看 UPS(不可中断电源)

其次,考虑创建持久事务,这些事务将尽早且经常保存,但在您告诉它之前不会提交。这一点超出了 TSQL 中的典型事务。

于 2009-04-10T04:39:07.807 回答
1

如果是硬断电(比如笔记本电脑上的电池在拔掉电源时拔掉了),那么除了每次都写入磁盘之外,您无能为力。步。的。这。方式。(谈论性能损失。)并且还要确保您记录了一些内容,以让应用程序知道它何时启动备份它之前正在执行的操作,以便它可以继续或重试操作。

如果是断电,例如按下电源按钮以关闭/睡眠/休眠计算机,则侦听 SystemEvents.PowerModeChanged 事件并采取相应措施。

最后,确保如果您的数据在中途写入数据库时​​会损坏,请确保您的数据库写入是原子的(所有更改都发生并被接受,或者它们都不被接受)。

于 2009-04-10T04:41:41.610 回答
1

您可以将当前接收到的信息附加到文件系统中。这将影响性能,但可以让您回到最后一个被捕获的项目。

当应用程序启动时检测是否有挂起的文件,并提供恢复选项。适当地加载保存在文件中的数据。

一旦您掌握了所有信息,当您执行付款时发生的流程时,请确保以原子方式记录流程中的任何重大更改。如果您正在访问外部系统,请记录您启动操作的时间以及它立即返回的时间。在上述情况下,总有一个时间窗口可能会失败,但您希望将其保持尽可能短,并为恢复过程提供足够的信息。最坏的情况是,如果系统无法自动恢复,您希望它有足够的信息来确定它在进程中停止的位置。

于 2009-04-10T05:40:25.430 回答
0

PowerFailureException 类将解决这个问题。实际上只是用UPS维持电源。唯一的其他选择实际上是维护数据库事务的原子性。

于 2009-04-10T04:41:23.467 回答
0

您真正想要的是磁盘事务的原子性。有很多方法可以执行这些操作,但通常如果您使用现有的数据库产品,它会为您完成。

如果您推出自己的数据库或文件格式,您可以根据您的文件格式为您完成一些工作。

于 2009-04-10T04:45:32.427 回答
0

您可能需要考虑让您的应用程序使用SQLite

他们有一些关于何时使用 page的重要信息。

一些突出的点是:

  • 随着应用程序内容的修改,更新自动发生

  • 内容会持续自动更新,因此在发生电源故障或崩溃时不会丢失任何工作。

我正在为我将要实现的应用程序寻找类似的选项,该选项将在第三世界国家/地区使用,那里全天经常断电……到目前为止,SQLite 似乎是一个不错的选择.

但归根结底,您的选择将取决于您的个人情况和要求。

于 2013-09-25T01:32:24.810 回答