从sqlite FAQ我知道:
多个进程可以同时打开同一个数据库.多个进程可以同时执行SELECT.但是,只有一个进程可以随时对数据库进行更改.
所以,据我所知,我可以:1)从多个线程读取数据库(SELECT)2)从多个线程读取数据库(SELECT)并从单个线程写入(CREATE,INSERT,DELETE)
但是,我读到了预读日志,它提供了更多的并发性,因为读者不会阻止编写者,而编写者也不会阻止读者.阅读和写作可以同时进行.
最后,当我找到它时,我已经完全糊涂了:
以下是获取SQLITE_LOCKED错误的其他原因:
- 在SELECT语句仍处于挂起状态时尝试创建或删除表或索引.
- 当SELECT在同一个表上处于活动状态时,尝试写入表.
- 如果未设置sqlite,则尝试在多线程应用程序中同时在同一个表上执行两个SELECT.
- fcntl(3,对数据库文件的F_SETLK调用失败.这可能是由于NFS锁定问题引起的.例如,针对此问题的一个解决方案是将数据库移除,然后将其复制回来以使其具有新的Inode值
那么,我想为自己澄清什么时候应该避免锁?我可以从两个不同的线程同时读写吗?谢谢.
我有一些空的datagridview,它使用的数据源是List to BindingSource.因为AllowUserToAddRows = true,所以最初datagridview有一个空行.当我只选择此行并关闭表单时,datagridview会创建新的空对象.它为什么这样做?怎么预防这个?谢谢.
选择空行:
我得到了这个:

结论:经过多次尝试寻找解决方案后,我决定使用datagridview和两个按钮(添加行和删除行)创建UI控件.在这一点上,我不再按计划做,但我仍然很高兴知道解决方案.