使用PostgreSql和ADO.NET在C#WinForms中进行记录和表锁定
我使用的是.NET Framework 4.6.1,WinForms,PostgreSQL 6.4beta4和Npgsql以及ADO.NET.
我当前的应用程序是一个多用户应用程序,其中所有用户都连接到同一个数据库. 使用DataTable,BindingSource和BindingNavigator将数据绑定到控件. 我想避免两个用户同时编辑DataRow. 我发现您可以将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}信号.当前活动的客户端应该接收两个信号并设置行可编辑/不. 希望有一定的价值. (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |