背景
1.它是一个使用Sqlite数据库的c#应用程序
2.如果db不存在,此应用程序将创建空数据库,并从服务器向其同步数据。
问题:
应用程序有时会突然崩溃。看起来有一些未处理的异常。
2。即使我重新启动应用程序,它也会立即崩溃。
临时解决方案:
1.将db复制到其他位置并删除原始数据库
2.运行应用程序。没有崩溃。由于不存在db,因此应用程序会创建空数据库
3.复制备份数据库并呜呜应用程序启动正常,没有任何崩溃。
我的问题:
1。应用程序如何使用相同的旧数据库,因为它反复崩溃了应用程序?
注意:
1.我无法在调试中重现此崩溃,因为我不知道它在哪种情况下失败了。
2。任何输入将不胜感激,所以不要犹豫,猜测解决方案。
的预测:
1.一些支持临时文件处于不一致状态,并在连接到db时导致问题,当我们创建一个具有相同名称的新数据库时,这些文件将被新的一致新文件覆盖。
答案 0 :(得分:2)
首先我要说的是,我认为没有任何代码或错误,没有人可以回答您的问题。
- 任何意见都将受到赞赏,所以不要犹豫,猜测解决方案。
醇>
所以我只想把它放在这里:
有很多事情可以使您的应用程序崩溃或出现如下错误:
- 申请不一致
- 您的应用程序中的数据库创建出错了
- 权利?
- 在做任何事之前连接都出错了
- 由于路径错误,连接出错了
- 连接出错,因为您的数据库不存在
- 同步出错
你试过看过电脑的日志了吗? 您是否更新了您正在使用的所有内容 根据您的描述,我猜您在代码中的某处对数据库进行了更改,这会使整个应用程序失败。
注意: 1.我没有在调试中重现这个崩溃,因为我不知道它在哪种情况下失败。
因此,当您正常运行应用程序时,您可以获得崩溃,但在调试时,您无法重现它。 这是仅在您的计算机上发生,还是在其他环境中发生
我知道这可能不是您正在寻找的答案,但如果需要,您可以检查所有这些。(如果需要,我会将其删除)
祝你好运!答案 1 :(得分:1)
可能有人在伤害数据库文件。也许它是你自己的应用程序,如果它包含多个线程,或者如果你同时启动多个实例。默认情况下,SQLite能够处理这些情况,但是有一些配置选项可以使它不是线程安全的。看看documentation。或者,也许,您的应用程序直接修改数据库文件,绕过SQLite(检查您正在使用的路径)。
也许SQLite无法在数据库附近创建预写日志文件,如果在某些事务处于活动状态时应用程序被终止,则会导致无法恢复的数据库损坏。
SQlite的数据库格式为documented,因此您可以比较有效和损坏的文件,并找出其中哪些部分已被破坏。
作为最后的手段,您可以使用SQLite的源代码来构建自己的带有调试信息的库。