【问题标题】:database is locked exception on drop table数据库在删除表上被锁定异常
【发布时间】:2015-04-27 12:20:33
【问题描述】:

我目前面临数据库锁定异常的问题。

我有一个更新功能,比如

private void UpdateVersion(string version)
{
        string qry = "DROP TABLE IF EXISTS version; " +
                     "CREATE TABLE IF NOT EXISTS version ( version INTEGER NOT NULL );" +
                     "INSERT INTO version VALUES ("+version+");";
        try
        {
            SQLiteCommand cmd = new SQLiteCommand(qry, this.dbConnection);
            cmd.ExecuteNonQuery();
        }
        catch (SQLiteException ex)
        {
            // stuff
        }
    }

我总是得到

{"database is locked\r\ndatabase is locked"}
ErrorCode   5
ResultCode  Busy

这有点奇怪,因为相同的查询在 SQLite 浏览器(如 SQLiteStudio 或 SQLite 的 DB 浏览器)中运行没有任何问题。我发现异常是在第一个查询部分(DROP TABLE)引发的。

我在代码中的每个 DROP TABLE 上都面临这个问题:/。

有人有想法吗? :)

【问题讨论】:

  • 如果您只是发送DROP TABLE IF EXISTS version;语句会发生这种情况吗?
  • 是的,我检查了 10 次。 Not select qry 在 drop qry 的前面

标签: c# sqlite visual-studio-2013 system.data.sqlite


【解决方案1】:

如果您在此表上的 SELECT 语句处于活动状态时尝试删除表,则可能会出现此错误。

您可以在此处找到问题的可能原因:

http://www.sqlite.org/cvstrac/wiki?p=DatabaseIsLocked

【讨论】:

    【解决方案2】:

    开始传输

    使用 AdventureWorks

    SELECT * FROM Person.Address WITH (UPDLOCK) WHERE 地址Id

    选择资源类型、请求模式、资源描述 FROM sys.dm_tran_locks WHERE 资源类型 '数据库'

    回滚

    【讨论】:

    • 这是 SQLite。没有USE,也没有WITH (UPDLOCK)
    猜你喜欢
    • 2012-06-13
    • 2017-07-04
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-07-13
    相关资源
    最近更新 更多