关于RDA的Push和Pull方法多种情况的测试结果

数据库表定义

CREATE   TABLE   [ TestRDA ]  (
 
[ AutoID ]   [ int ]   IDENTITY  ( 1 1 NOT   NULL  ,
 
[ AFlag ]   [ varchar ]  ( 50 ) COLLATE Chinese_PRC_CI_AS  NOT   NULL  ,
 
[ AName ]   [ varchar ]  ( 50 ) COLLATE Chinese_PRC_CI_AS  NULL  ,
 
CONSTRAINT   [ PK_TestRDA ]   PRIMARY   KEY    CLUSTERED  
 (
  
[ AutoID ] ,
  
[ AFlag ]
 )  
ON   [ PRIMARY ]  
ON   [ PRIMARY ]
GO

【注意】 AFlag主要用来标识数据是Server端修改的还是Mobile端修改的。

目前数据库的数据如下:

 AutoID AFlag AName
====================================
 1 M 王伟 
 1 S Deboy 
 2 M 王伟 
 2 S Wang 
 3 M 王伟 
 3 S Randy 
 4 M 王伟 
 4 S Xia 
 5 M 王伟 
 6 M 王伟 
 7 M 王伟 
====================================

 

现象1:
当我编写一个Adapter类用来处理SQLCE上数据的批量更新和删除的时候,在编写UpdateCommand之时
如果写成

sqlUpdateCommand1.Parameters.Add( new  SqlCeParameter( " @AFlag " , System.Data.SqlDbType.VarChar,  50 " AFlag " ));

则报错:

未处理的“System.ArgumentOutOfRangeException”类型的异常出现在 System.Data.SqlServerCe.dll 中。
其他信息: ArgumentOutOfRangeException


如果写成:

sqlUpdateCommand1.Parameters.Add( new  SqlCeParameter( " @AFlag " , System.Data.SqlDbType.NVarChar,  50 " AFlag " ));

则问题解决,至于为什么,我不知道

现象2:
针对目前的数据,如果Mobile上在Pull的时候限制条件 AutoID<4,那么将会取下来如下数据:

1 M 王伟 
 1 S Deboy 
 2 M 王伟 
 2 S Wang 
 3 M 王伟 
 3 S Randy 

此时,在Mobile上插入数据( M Test1)
则数据在数据库中表示为:

4  M Test1

那么当使用Push同步到数据的时候,将会出现如下错误

The table cannot be opened.[,,,Table Name,,]

原因:服务器上的主键已经存在,而且Mobile端并没有取此数据进行更改,而是完全新建的,将会产生冲突。

现象3:
如果在服务器端修改了数据:
   1 M 王伟(=>Test)
然后在Mobile上修改了这条数据:
   1 M 王伟(=>Mobile)
当最后使用RDA的Push方法的时候,此数据在服务器上的结果将是
   1 M Mobile
因此数据的修改冲突,没有优先级排序,只有修改时间前后的判定

现象4:
当Mobile端使用RDA的Push方法的时候,Mobile端将只提交在上一次Pull或者Push之后更改的部分。

 

 

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值