背景:
c#编写sql语句插入的sqlite本地数据库的时候,遇到database is locked。
解决方案:
1、首先怀疑是否插入的格式不正确,一开始编写的是 insert into tablename values(?,?,?,?),尝试更换其他格式,在sqlite软件执行,可以正确插入,但是在c#中,还是会遇到database is locked。
2、怀疑是否哪里没有关闭资源,最后经过多次排查,发现是一个SqliteDataReader读取完之后,没有进行关闭,但是这个reader是写在using的语句中,猜测应该用完,垃圾回收器会进行回收。但是实际是没有,导致数据库一直被占用着,产生了这个错误。后面只需要在reader加上close方法,即可正常插入。
注意:
1、旧版本的sqlite可能存在开启一个SqliteConnection,SqliteDataReader都是需要手动关闭,执行Close方法。
2、最好都是使用using语句进行相关的资源操作。