您当前的位置: 首页 >  c#

ITKEY_

暂无认证

  • 0浏览

    0关注

    732博文

    0收益

  • 0浏览

    0点赞

    0打赏

    0留言

私信
关注
热门博文

C# SQLite Database Locked exception

ITKEY_ 发布时间:2022-07-23 23:30:00 ,浏览量:0

现象

在查询时没有问题,但是在Insert时会报数据库被锁定。

原因分析

可能是代码某个地方连接着数据库,忘记关闭了。

解决办法

原理我还没有完全搞懂,不过根据下面的写法确实解决了问题。

在某个地方,连接处于打开状态。摆脱OpenConnection和CloseConnection改变ExecuteNonQuery这个:

using (SQLiteConnection c = new SQLiteConnection(ConnectionString))
{
    c.Open();
    using (SQLiteCommand cmd = new SQLiteCommand(sql, c))
    {
        cmd.ExecuteNonQuery();
    }
}

此外,将读取数据的方式更改为:

using (SQLiteConnection c = new SQLiteConnection(ConnectionString))
{
    c.Open();
    using (SQLiteCommand cmd = new SQLiteCommand(sql, c))
    {
        using (SQLiteDataReader rdr = cmd.ExecuteReader())
        {
            ...
        }
    }
}

不要尝试像在这里一样自行管理连接池。首先,它比您编写的代码要复杂得多,但其次,它已经在SQLiteConnection对象内部进行了处理。最后,如果你没有利用using,你就没有正确地处理这些对象,你最终会遇到像你现在看到的那样的问题。

参考

https://stackoverflow.com/questions/17592671/sqlite-database-locked-exception

关注
打赏
1665243900
查看更多评论
立即登录/注册

微信扫码登录

0.0401s