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

前端之家收集整理的这篇文章主要介绍了使用PostgreSql和ADO.NET在C#WinForms中进行记录和表锁定前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
我使用的是.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}信号.当前活动的客户端应该接收两个信号并设置行可编辑/不.

希望有一定的价值.

猜你在找的Postgre SQL相关文章