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