Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/315.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 从读取的SQLite锁定表_C#_Database_Sqlite_Database Locking - Fatal编程技术网

C# 从读取的SQLite锁定表

C# 从读取的SQLite锁定表,c#,database,sqlite,database-locking,C#,Database,Sqlite,Database Locking,问题:从SQLite获取数据库已锁定的错误 预期结果:多个应用程序可以从数据库中读取数据,如果只有一个应用程序向数据库中写入数据,则不会锁定该表 我有一个C#应用程序,可以读取和写入SQLite数据库。当应用程序的多个实例同时运行时,应用程序的任何实例都不能对数据库进行更改,但所有实例都可以从数据库中读取。我所发现的一切都表明,只要一次只有一个应用程序试图写入BD,它就不应该被锁定。我的连接字符串明确表示LockingMode=Normal;同步=关闭。有什么建议可以解释是什么原因造成的吗?以下

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

我有一个C#应用程序,可以读取和写入SQLite数据库。当应用程序的多个实例同时运行时,应用程序的任何实例都不能对数据库进行更改,但所有实例都可以从数据库中读取。我所发现的一切都表明,只要一次只有一个应用程序试图写入BD,它就不应该被锁定。我的连接字符串明确表示
LockingMode=Normal;同步=关闭
。有什么建议可以解释是什么原因造成的吗?以下是运行的连接方法和遇到锁的写入:

私有字符串\u数据库路径; 专用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;
        }
    }

写入程序需要以独占方式访问数据库,因此它会阻止任何其他读卡器和写入程序


要允许一个写入程序与读卡器同时运行,如果您不使用网络,请启用。

写入程序需要独占访问数据库,因此它会阻止任何其他读卡器和写入程序


要允许一个编写器与读卡器同时运行,如果您不使用网络,请启用。

让我们看看代码,您已经编写了哪一部分?有太多的东西要放进去。在从数据库中读取之前执行
PRAGMA read_uncommitted=1
。请注意,这可能会导致脏读。为什么不使用关键字打开和关闭连接?如果使用关键字打开连接解决了我遇到的问题,我愿意对此进行探讨。如果没有,这将是一个未来日期的问题。让我们看看代码,你写了哪部分?有太多的东西要放进去。在从数据库中读取之前执行
PRAGMA read_uncommitted=1
。请注意,这可能会导致脏读。为什么不使用关键字打开和关闭连接?如果使用关键字打开连接解决了我遇到的问题,我愿意对此进行探讨。如果没有,那将是未来约会的问题。这太棒了!这解决了返回
SQLITE\u BUSY
的问题。当子窗体退出时,是否有办法强制读取锁断开或解除其优先级,或者是断开锁以关闭建立它的连接的唯一办法?锁由事务持有。你可能有一些打开的光标。这太棒了!这解决了返回
SQLITE\u BUSY
的问题。当子窗体退出时,是否有办法强制读取锁断开或解除其优先级,或者是断开锁以关闭建立它的连接的唯一办法?锁由事务持有。您可能有一些打开的游标。