|
本帖最后由 我是MT 于 2015-9-9 15:35 编辑
搜了下本论坛的相关主题,http://www.sufeinet.com/thread-10495-1-1.html 。这位兄弟也是遇到类似的问题。数据库被锁住了。
我不知道这是不是由于多线程操作导致的sqlite被锁。
我的情况和上面这位兄弟的情况唯一相同的地方可能是,2个不同的线程操作sqlite。
From1 主线程, Form1中有个Timer1 。Timer1开启的时候是不是运行在另外一个线程里面?
Timer1_Tick里面,首先我调用了From1.cs里面的方法查询数据库,返回字符串;判断这个字符串条件如果True,则再次连接数据库,写入数据。在写入的时候,报错,database is locked! 按理说,我这里不存在多线程啊。
上面这张图片是一个方法,下面图片是Timer1_Tick{.... } 中的代码。时钟事件中调用了上面的那个方法。时钟周期是5秒钟。
每次操作,我都打开了之后 就都关闭了数据库连接,为何还会出现这种被锁住的情况呢?而且我还发现有不少的人遇到了这种情况。按道理说.net或者C#已经是比较成熟了。对于处理sqlite真的只能够引用“System.Data.SQLite.dll”
追加 :
可能是timer的问题, 在同一时刻,timer1和timer2同时访问数据库,进行对同一个数据库同一个表格,同一个字段进行修改操作。
OK。搞来搞去还是自己通过思考解决了问题了。最后把读取数据和更新数据的代码全部放在一个线程中执行就不会报错了。
从一开始设计代码逻辑就有点太分散。不严密啊。
|
|