Sqlite - 无法连接数据库

时间:2014-02-26 14:40:03

标签: c# winforms sqlite

背景
1.它是一个使用Sqlite数据库的c#应用程序 2.如果db不存在,此应用程序将创建空数据库,并从服务器向其同步数据。

问题:
应用程序有时会突然崩溃。看起来有一些未处理的异常。
2。即使我重新启动应用程序,它也会立即崩溃。

临时解决方案:
1.将db复制到其他位置并删除原始数据库 2.运行应用程序。没有崩溃。由于不存在db,因此应用程序会创建空数据库 3.复制备份数据库并呜呜应用程序启动正常,没有任何崩溃。

我的问题:
1。应用程序如何使用相同的旧数据库,因为它反复崩溃了应用程序?

注意:
1.我无法在调试中重现此崩溃,因为我不知道它在哪种情况下失败了。
2。任何输入将不胜感激,所以不要犹豫,猜测解决方案。

预测:
1.一些支持临时文件处于不一致状态,并在连接到db时导致问题,当我们创建一个具有相同名称的新数据库时,这些文件将被新的一致新文件覆盖。

2 个答案:

答案 0 :(得分:2)

首先我要说的是,我认为没有任何代码或错误,没有人可以回答您的问题。

  
      
  1. 任何意见都将受到赞赏,所以不要犹豫,猜测解决方案。
  2.   


所以我只想把它放在这里:

有很多事情可以使您的应用程序崩溃或出现如下错误:
  - 申请不一致
  - 您的应用程序中的数据库创建出错了   - 权利?
  - 在做任何事之前连接都出错了   - 由于路径错误,连接出错了   - 连接出错,因为您的数据库不存在   - 同步出错

你试过看过电脑的日志了吗? 您是否更新了您正在使用的所有内容 根据您的描述,我猜您在代码中的某处对数据库进行了更改,这会使整个应用程序失败。

  

注意:   1.我没有在调试中重现这个崩溃,因为我不知道它在哪种情况下失败。

因此,当您正常运行应用程序时,您可以获得崩溃,但在调试时,您无法重现它。 这是仅在您的计算机上发生,还是在其他环境中发生

我知道这可能不是您正在寻找的答案,但如果需要,您可以检查所有这些。(如果需要,我会将其删除)

祝你好运!

答案 1 :(得分:1)

可能有人在伤害数据库文件。也许它是你自己的应用程序,如果它包含多个线程,或者如果你同时启动多个实例。默认情况下,SQLite能够处理这些情况,但是有一些配置选项可以使它不是线程安全的。看看documentation。或者,也许,您的应用程序直接修改数据库文件,绕过SQLite(检查您正在使用的路径)。

也许SQLite无法在数据库附近创建预写日志文件,如果在某些事务处于活动状态时应用程序被终止,则会导致无法恢复的数据库损坏。

SQlite的数据库格式为documented,因此您可以比较有效和损坏的文件,并找出其中哪些部分已被破坏。

作为最后的手段,您可以使用SQLite的源代码来构建自己的带有调试信息的库。