• 数据集冲突


    冲突检测:  
    SqlDataAdapter ada;
    ada.Update(IssueData.GetChanges(), "Issues') //IssueData是一个强类型的DataSet. GetChanges函数得到客户端修改过的那部分的数据集.如果没修改过,返回一个空数据集.
    Private Sub daIssues_RowUpdated(sender As Object, e As SqlRowUpdatedEventArgs) Handles ada.RowUpdated
            If e.Status = UpdateStatus.ErrorsOccurred Then
                 m_conflictData.Issues.Rows.Add(e.Row.ItemArray) //m_conflictData like IssueData
               //得到冲突的那条客户端数据
                 e.Status = UpdateStatus.Continue
            End If
    End Sub
    //RowUpdated 事件。在更新每一行后,该事件将启动。使用 SqlRowUpdatedEventArgs 对象的 Status 和 Errors 属性。如果 Status 为 ErrorsOccured 并且 Errors 实例是 System.Data.DBConcurrencyException,则告诉您需要从服务器中获取冲突记录,由于下层数据被改变了,更新命令影响了0个记录.

    当然这个不是自动完成的,需要UpdateCommand函数.如下:
    "UPDATE Issues SET  Description = @Description WHERE IssueID = @Original_IssueID and AND Description = @Original_Description"
      UpdateCommand.Parameters.Add(New System.Data.SqlClient.SqlParameter("@Description", System.Data.SqlDbType.NVarChar, 2000, "Description'))  //普通的更新

      UpdateCommand.Parameters.Add(New System.Data.SqlClient.SqlParameter("@Original_IssueID", System.Data.SqlDbType.Int, 4, System.Data.ParameterDirection.Input, False, CType(0, Byte), CType(0, Byte), "IssueID", System.Data.DataRowVersion.Original, Nothing)) //DataRowVersion.Original

      UpdateCommand.Parameters.Add(New System.Data.SqlClient.SqlParameter("@Original_Description", System.Data.SqlDbType.NVarChar, 2000, System.Data.ParameterDirection.Input, False, CType(0, Byte), CType(0, Byte), "Description", System.Data.DataRowVersion.Original, Nothing)) //DataRowVersion.Original

    如果数据源已经更改过,则这个UpdateCommand影响了0个记录,发生异常.

    clientRow = m_conflictData.Issues(0)  //冲突数据的客户端版本
    .............//重新从服务器得到最新的IssueData
    serverRow = IssueData.Issues.Rows.Find(clientRow.IssueID) //得到冲突数据的服务器版本


    注:
    DataRowVersion 向您通知存在 DataRow 的哪个版本。版本在以下情况下发生更改: 
    在调用 DataRow 对象的 BeginEdit 方法之后,如果更改该值,则 Current 和 Proposed 值变得可用。 
    在调用 DataRow 对象的 CancelEdit 方法之后,Proposed 值将被删除。 
    在调用 DataRow 对象的 EndEdit 方法之后,Proposed 值变成 Current 值。 
    在调用 DataRow 对象的 AcceptChanges 方法之后,Original 值变得与 Current 值相同。 
    在调用 DataTable 对象的 AcceptChanges 方法之后,Original 值变得与 Current 值相同。 
    在调用 DataRow 对象的 RejectChanges 之后,Proposed 值将被丢弃,版本变成 Current


    DataRowState 由 DataRow 类的 RowState 属性返回的 DataRowState 枚举。
    Added 该行已添加到 DataRowCollection 中,AcceptChanges 尚未调用。
    Deleted 该行已通过 DataRow 的 Delete 方法被删除。
    Detached 该行已被创建,但不属于任何 DataRowCollection。DataRow 在以下情况下立即处于此状态:创建之后添加到集合中之前;或从集合中移除之后。
    Modified 该行已被修改,AcceptChanges 尚未调用。
    Unchanged 该行自上次调用 AcceptChanges 以来尚未更改。
  • 相关阅读:
    Mysql数据库的安装及配置
    java调用ws服务
    linux下安装mysql
    实现离线地图行政区域划分
    linux远程方式,以及基础命令
    javascript对文件的读写
    jsoup对 HTML 文档的解析和操作
    Linux netstat命令详解
    服务器开发工具
    github基本命令
  • 原文地址:https://www.cnblogs.com/Joseph/p/310938.html
Copyright © 2020-2023  润新知