0

问题:从 SQLite 获取错误,表明数据库已锁定 预期结果:多个应用程序可以从数据库中读取,如果只有一个应用程序写入,则表不会被锁定。

我有一个读取和写入 SQLite 数据库的 C# 应用程序。当应用程序的多个实例同时运行时,没有应用程序实例能够对数据库进行更改,但所有实例都可以从中读取。我发现的所有内容都表明,只要一次只有一个应用程序尝试写入 BD,它就不应被锁定。我的连接字符串明确指出LockingMode=Normal; Synchronous=Off. 关于导致这种情况的任何建议?以下是运行的连接方法和遇到锁的写入:

私有字符串 _databasePath ; 私有 SQLiteConnection _dbConn;

    public dbPrismIIDirectory()
    {
        _databasePath = "";
        try
        {
            _dbConn = new System.Data.SQLite.SQLiteConnection();
        }
        catch (Exception exc)
        {
            System.Windows.Forms.MessageBox.Show(exc.Message);
        }
    }

    public Boolean open(String databasePath)
    {
        _databasePath = databasePath;
        // Attempt to open the database
        try
        {
            _dbConn.ConnectionString = String.Format("Data Source={0}; LockingMode=Normal; Synchronous=On", _databasePath);
            _dbConn.Open();
            return true;
        }
        catch
        {
            return false;
        }
    }

    public Boolean CreateEntry()
    {
        try
        {
            sqlCMD.CommandText = //SET UP SQL HERE//;
            sqlCMD.ExecuteNonQuery();
            return true;
        }
        catch (Exception exc)
        {
            System.Windows.Forms.MessageBox.Show(exc.Message);
            return false;
        }
    }
4

1 回答 1

2

写入者需要对数据库的独占访问权限,因此它会阻止任何其他读取者和写入者。

要允许一个写入器与读取器同时运行,并且如果您不使用网络,请启用WAL 模式

于 2018-02-08T17:54:11.923 回答