Vb.net SQLite并发连接问题

Vb.net SQLite并发连接问题,vb.net,system.data.sqlite,sqlite,Vb.net,System.data.sqlite,Sqlite,我正在开发一个VB.NET应用程序。 根据应用程序的性质,一个模块必须每秒监视数据库(SQLite DB)。此监视是通过简单的select语句完成的,该语句运行以根据某些条件检查数据。 其他模块在同一SQLite DB上执行select、Insert和Update语句。 在SQLite上,并发select语句工作得很好,但我在这里很难找到它为什么不允许Inset和Update。 我知道这是一个基于文件的锁,但无论如何都有办法完成吗? 事实上,每个模块都会打开和关闭与数据库的连接。 我已经通过GU

我正在开发一个VB.NET应用程序。 根据应用程序的性质,一个模块必须每秒监视数据库(SQLite DB)。此监视是通过简单的select语句完成的,该语句运行以根据某些条件检查数据。 其他模块在同一SQLite DB上执行select、Insert和Update语句。 在SQLite上,并发select语句工作得很好,但我在这里很难找到它为什么不允许Inset和Update。 我知道这是一个基于文件的锁,但无论如何都有办法完成吗? 事实上,每个模块都会打开和关闭与数据库的连接。 我已经通过GUI设计限制用户一次运行一条语句


任何帮助都将不胜感激。

如果您的数据库文件不在网络上,您可以通过启用


但是,也许您应该只使用一个连接,并对所有数据库访问执行自己的同步。

您可以使用一些锁定机制来确保数据库在多线程情况下工作。由于您的应用程序是根据您所说的读密集型的,所以您可以考虑使用RealeWrror锁或RealeWrrordRooSLIM。(有关更多详细信息,请参阅和)

如果只有一个数据库,那么只创建一个锁实例就可以了;如果有多个数据库,则可以为每个数据库分配一个锁。每次执行读或写操作时,请在执行操作之前输入锁(对于ReaderWriterLockSlim,请输入EnterReadLock();对于ReaderWriterLockSlim,请输入AcquisiteReaderLock()),然后退出锁。注意,可以将锁的出口放在finally子句中,以免忘记释放它


上述策略正在我们的生产应用中使用。在您的案例中使用单线程是不太好的,因为您必须考虑性能。

谢谢您的回复。现在我在单线程(表单)中完成这一切。即使该线程被关闭,第二个线程(相同形式)也将被打开。是的,它不是基于网络的文件。不知道如何使用WAL模式。你能帮我在VB.NET中编写一段spinet代码吗。