一种sqlite出现“database is locked”的原因

时间:2025-03-23 21:04:50

用c#读写sqlite数据库时,发现“database is locked ”错误。

程序中没有多线程,没有并发访问,每次()后都有对应的(),并且在close之前不会打开另一个链接。

网络上搜索,各种导致这个错误的原因,都不存在,这就让人很奇怪了。

后来乱试一通,终于发现问题。SQLiteDataReader执行查询后,必须把所有的记录都读出来,即使只有一条记录。

出现错误的代码:

        SQLiteCommand command = new SQLiteCommand("select * from tablename where id=1", cn);
        SQLiteDataReader reader = ();
        if (())
	    {
	    	...
	    }

正确的代码:

    SQLiteCommand command = new SQLiteCommand("select * from tablename where id=1", cn);
    SQLiteDataReader reader = ();
    while (())
    {
	...
    }

把 if 改成 while 就可以。