2014-02-26 71 views
1

背景:
1.及其使用SQLite DATABSE
2.本应用程序创建空分贝如果分贝不存在和同步数据,将其从服务器C#应用程序。SQLite的 - 未能连接数据库

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

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

我的问题:
1.如何应用正在与老分贝,因为它是前面多次崩溃的应用程序?

注:
1.我没能重现此崩溃调试因为我不知道在这种情况下它是越来越失败。
2.任何输入将不胜感激,所以不要犹豫猜测解决方案。

预测:
1.一些支持临时文件是不一致的状态,造成的问题,同时连接到数据库,当我们正在创建具有相同的名称,那么这些文件被改写为新鲜一致的新一个新的数据库文件。

+0

添加一些日志,而不仅仅是一个崩溃,你会得到一个堆栈跟踪和一个详细的异常。 – ken2k

+1

对不起。如果你不能告诉我们什么是例外情况,那么其他人就无法做到。处理应用程序中的所有异常,并使用Log4Net或其他东西将它们记录到文件中。 –

+0

应用程序没有日志,并且它不经常发生,我无法在生产中部署带有日志和捕获语句的新代码 –

回答

2

我首先想说的是,我认为没有任何代码或错误,没有人能回答你的问题。

  1. 任何输入将被理解的,所以不要毫不犹豫地猜测该溶液中。


所以我就扔这在这里:

有很多事情可以让你的应用程序崩溃或给出错误,如:
- 应用程序是不相符的
- 数据库创建在您的应用程序中出错
- 权限?
- 连接甚至做任何事情
之前出现问题 - 连接出了问题,因为道路是错误的
- 连接,因为你的数据库不存在
出错 - 正在同步出错

您是否尝试过在看电脑的日志?
你有没有更新你正在使用的一切。
从你的描述中我猜你的代码中的某个地方会改变你的数据库,这会让你的整个应用程序失败。

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

因此,当您正常运行应用程序时,您可能会遇到崩溃,但在调试时无法重现它。 这是否只发生在您的计算机上或这是否也发生在其他enviremonts

我知道这可能是不是你要找的答案,但你可以检查所有这一切如果u想要的。(如果需要的话我会删除它)

祝你好运!

1

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

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

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

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