小编And*_*lov的帖子

如何防止SQLite数据库锁?

从sqlite FAQ我知道:

多个进程可以同时打开同一个数据库.多个进程可以同时执行SELECT.但是,只有一个进程可以随时对数据库进行更改.

所以,据我所知,我可以:1)从多个线程读取数据库(SELECT)2)从多个线程读取数据库(SELECT)并从单个线程写入(CREATE,INSERT,DELETE)

但是,我读到了日志,它提供了更多的并发性,因为读者不会阻止编写者,而编写者也不会阻止读者.阅读和写作可以同时进行.

最后,当我找到时,我已经完全糊涂了:

以下是获取SQLITE_LOCKED错误的其他原因:

  • 在SELECT语句仍处于挂起状态时尝试创建或删除表或索引.
  • 当SELECT在同一个表上处于活动状态时,尝试写入表.
  • 如果未设置sqlite,则尝试在多线程应用程序中同时在同一个表上执行两个SELECT.
  • fcntl(3,对数据库文件的F_SETLK调用失败.这可能是由于NFS锁定问题引起的.例如,针对此问题的一个解决方案是将数据库移除,然后将其复制回来以使其具有新的Inode值

那么,我想为自己澄清什么时候应该避免锁?我可以从两个不同的线程同时读写吗?谢谢.

sqlite

10
推荐指数
3
解决办法
2万
查看次数

删除dataGridView的最后一行空行

我有一些空的datagridview,它使用的数据源是List to BindingSource.因为AllowUserToAddRows = true,所以最初datagridview有一个空行.当我只选择此行并关闭表单时,datagridview会创建新的空对象.它为什么这样做?怎么预防这个?谢谢.

选择空行: 在此输入图像描述 我得到了这个: 在此输入图像描述

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

.net c# datagridview winforms

1
推荐指数
1
解决办法
1万
查看次数

标签 统计

.net ×1

c# ×1

datagridview ×1

sqlite ×1

winforms ×1