用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 就可以。

Logo

魔乐社区(Modelers.cn) 是一个中立、公益的人工智能社区,提供人工智能工具、模型、数据的托管、展示与应用协同服务,为人工智能开发及爱好者搭建开放的学习交流平台。社区通过理事会方式运作,由全产业链共同建设、共同运营、共同享有,推动国产AI生态繁荣发展。

更多推荐