zoukankan      html  css  js  c++  java
  • 数据集冲突

    冲突检测:  
    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 以来尚未更改。
  • 相关阅读:
    小坦克 沪牌代拍 包中 不中赔100
    JMeter 测试 ActiveMq
    上海程序员 落户攻略
    性能测试(一) 基础概念
    2017 沪牌中标后流程
    2017 上海车牌(沪牌)标书购买攻略
    2017年 外牌转沪牌 攻略 (沪南路车管所)
    Android Monkey 压力测试 介绍
    Android ADB 用法
    Python自动化测试 (九)urllib2 发送HTTP Request
  • 原文地址:https://www.cnblogs.com/Joseph/p/310938.html
Copyright © 2011-2022 走看看