加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

使用PostgreSql和ADO.NET在C#WinForms中进行记录和表锁定

发布时间:2020-12-13 16:14:04 所属栏目:百科 来源:网络整理
导读:我使用的是.NET Framework 4.6.1,WinForms,PostgreSQL 6.4beta4和Npgsql以及ADO.NET. 我当前的应用程序是一个多用户应用程序,其中所有用户都连接到同一个数据库. 使用DataTable,BindingSource和BindingNavigator将数据绑定到控件. 我想避免两个用户同时编辑D
我使用的是.NET Framework 4.6.1,WinForms,PostgreSQL 6.4beta4和Npgsql以及ADO.NET.

我当前的应用程序是一个多用户应用程序,其中所有用户都连接到同一个数据库.

使用DataTable,BindingSource和BindingNavigator将数据绑定到控件.

我想避免两个用户同时编辑DataRow.
因为我想在更通用的方法上实现这一点,所以我在考虑创建一个DataTable后代并添加属性LockMode(None,Row,Table).

我发现您可以将ColumnChanged事件与RowState结合使用来检测数据的更改.

我现在知道用户是否正在插入新值,编辑(RowState =已修改)现有值或仅在记录中查找(RowState = Unchanged).

因此,我正在寻找一个用户开始编辑时锁定DataRow的解决方案.在应用程序中,我想在用户导航(通过使用Bindingnavigator或以编程方式)到锁定记录时显示消息.

我找到的大多数解决方案都是针对MySql Server的,例如:How to perform a row lock?或TransactionScope locking table and IsolationLevel.

但是我正在寻找PostgreSQL解决方案,所以即使是MS(https://msdn.microsoft.com/en-us/library/system.transactions.transactionscope(v=vs.110).aspx)关于这个主题的文章也不能在这里使用.

如果有PostgreSQL和ADO.NET经验的人能帮助我,我将不胜感激.谢谢.

您必须同步您的客户才能实现这一目标.

我将添加一个额外的可以为空的日期列(RowIsBeeingEdited),指示行开始编辑的时间.我会设置行可编辑/不在客户端应用程序开始行[RowIsBeeingEdited]值.

我还会实现两个信号:{UserStartedEditingRow}& {UserFinishedEditingRow},它将传播到所有客户端,表明客户端X已开始/完成编辑行Y.

在开始编辑行时,我将设置行[RowIsBeeingEdited] = {now}并发送{UserStartedEditingRow}信号.在结束编辑时,我将设置行[RowIsBeeingEdited] = null并发送{UserFinishedEditingRow}信号.当前活动的客户端应该接收两个信号并设置行可编辑/不.

希望有一定的价值.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读