一种sqlite出现“database is locked”的原因
·
用c#读写sqlite数据库时,发现“database is locked ”错误。
程序中没有多线程,没有并发访问,每次cn.Open()后都有对应的cn.Close(),并且在close之前不会打开另一个链接。
网络上搜索,各种导致这个错误的原因,都不存在,这就让人很奇怪了。
后来乱试一通,终于发现问题。SQLiteDataReader执行查询后,必须把所有的记录都读出来,即使只有一条记录。
出现错误的代码:
SQLiteCommand command = new SQLiteCommand("select * from tablename where id=1", cn);
SQLiteDataReader reader = command.ExecuteReader();
if (reader.Read())
{
...
}
正确的代码:
SQLiteCommand command = new SQLiteCommand("select * from tablename where id=1", cn);
SQLiteDataReader reader = command.ExecuteReader();
while (reader.Read())
{
...
}
把 if 改成 while 就可以。
魔乐社区(Modelers.cn) 是一个中立、公益的人工智能社区,提供人工智能工具、模型、数据的托管、展示与应用协同服务,为人工智能开发及爱好者搭建开放的学习交流平台。社区通过理事会方式运作,由全产业链共同建设、共同运营、共同享有,推动国产AI生态繁荣发展。
更多推荐


所有评论(0)