程序问答   发布时间:2022-06-02  发布网站:大佬教程  code.js-code.com
大佬教程收集整理的这篇文章主要介绍了SQLite数据库锁定异常大佬教程大佬觉得挺不错的,现在分享给大家,也给大家做个参考。

如何解决sqlite数据库锁定异常?

开发过程中遇到sqlite数据库锁定异常的问题如何解决?下面主要结合日常开发的经验,给出你关于sqlite数据库锁定异常的解决方法建议,希望对你解决sqlite数据库锁定异常有所启发或帮助;

连接一直保持打开状态。摆脱OpenConnectionCloseConnection和改变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,您将 正确 这些对象,最终会遇到诸如现在所看到的问题。

解决方法

我正在从 sqlite* 获得 数据库被锁定的 异常,仅适用于某些查询。 *

下面是我的代码:执行任何SELEct语句时,它都可以正常工作。
当我在JobsTable 上执行任何write语句时,它也可以正常工作。

这很好用:

ExecuteNonQuery("deletE FROM Jobs WHERE id=1");

但是以同样的方式,如果我对employees表执行查询,则会引发 数据库被锁定 的异常。
这将引发异常:

ExecuteNonQuery("deletE FROM employees WHERE id=1");

以下是我的功能:

public bool OpenConnection()
{
    if (Con == null)
    {
        Con = new sqliteConnection(ConnectionString);
    }
    if (Con.State == ConnectionState.Closed)
    {
        Con.open();
        //Cmd = new sqliteCommand("PRAGMA FOREIGN_KEYS=ON",Con);
        //Cmd.ExecuteNonQuery();
        //Cmd.Dispose();
        //Cmd=null;
        return true;
    }
    if (IsConnectionBusy())
    {
        Msg.Log(new Exception("Connection busy"));
    }
    return false;
}

public Boolean CloseConnection()
{
    if (Con != null && Con.State == ConnectionState.open)
    {
        if (Cmd != null) Cmd.Dispose();
        Cmd = null;
        Con.Close();
        return true;
    }

    return false;
}

public Boolean ExecuteNonQuery(String sql)
{
    if (sql == null) return false;
    try
    {
        if (!OpenConnection())
            return false;
        else
        {
            //Tx = Con.begintransaction(isolationLevel.ReadCoR_876_11845@mitted);
            Cmd = new sqliteCommand(sql,Con);
            Cmd.ExecuteNonQuery();
            //Tx.Commit();
            return true;
        }
    }
    catch (Exception exception)
    {
        //Tx.RollBACk();
        Msg.Log(exception);
        return false;
    }
    finally
    {
        CloseConnection();
    }
}

这是例外:在第103行: Cmd.ExecuteNonQuery();

大佬总结

以上是大佬教程为你收集整理的SQLite数据库锁定异常全部内容,希望文章能够帮你解决SQLite数据库锁定异常所遇到的程序开发问题。

如果觉得大佬教程网站内容还不错,欢迎将大佬教程推荐给程序员好友。

本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。
如您有任何意见或建议可联系处理。小编QQ:384754419,请注明来意。