0

我有以下情况:

WPF 应用程序使用 Windows 共享上的每个 System.Data.SQLite 的 SQLite 文件作为后端。客户端是 Windows 7 家庭版

一位用户反映,她正在使用该软件,保存她输入的新数据,但过了一段时间,当她重新访问该软件时,她的一些东西不见了。

她说会议一直持续到上午 11:50 左右——相关 SQLite 文件的时间戳是上午 10:55。我在同一个网络共享中有一个日志文件,它是使用带有自动刷新的文件写入器写入的。

日志文件在上午 10:55 之前看起来很正常,然后有一行垃圾(看起来像是几行写在一起),然后正常运行。

显然,当时网络(或者可能是驱动器)一定有问题。奇迹般地,我的申请照常继续。没有抛出异常,根据日志文件,所有事务都“完成”。没有日志文件可以讲述这个故事。这种行为 - 虽然本身很奇妙 - 不被用户欣赏:)

我的问题:这里发生了什么,将来我该如何预防?Windows 7 是否将文件缓存在备用列表中并且根本不关心将更改提交到实际磁盘?为什么我的应用程序或 SQLite 提供者不知道这一点?

我现在将构建一个确认机制来检查后端文件上的时间戳,以查看它在最后一次事务之后是否真的发生了变化,但这似乎有点傻。就像在没有抛出异常时非常迂腐地捕捉异常一样愚蠢:)

谢谢

TL;DR SQlite 文件在硬件(网络或驱动器)暂时发生故障后没有显示任何更改,但应用程序似乎继续运行,并且 System.Data.SQLite 没有引发异常。

4

1 回答 1

0

请参阅如何损坏 SQLite 数据库文件的第 3 节;当 SQLite 告诉它时,Windows 似乎没有同步网络共享。

于 2013-09-10T13:03:18.610 回答