数据库同步 SqlCeRemoteDataAccess.Pull 里面的trackoption 参数设置问题

Frenchkiss   2009-3-4 15:24 楼主
需要同步PDA和服务器数据库。用SQLCE3.0

SqlCeRemoteDataAccess.Pull方法可以下载服务器数据库的数据到PDA,

其中有个参数叫trackoption 。

当我把这个参数设置为TRACKINGOFF,也就是不跟踪数据变化时,没有任何问题,可以下载数据。

但当把它设置为TRACKINGON时,就会报错80040E3F,描述是表已经存在。服务器中,该表的主键已经创立了,而且下载语句是select * from table.



下面是MSDN对这个参数的说明:


  1. 下表列出了 RDA_TRACKOPTION 枚举的枚举器及其对应的值,并分别进行了说明:

  2. 成员名称  值  说明  
  3. TRACKINGOFF
  4. 0
  5. SQL Server 2005 Compact Edition (SQL Server Compact Edition) 不跟踪对所请求表的更改。对于本地表,不需要 PRIMARY KEY 约束,也不会创建该约束。

  6. TRACKINGON
  7. 1
  8. SQL Server Compact Edition 跟踪对所请求表的所有更改。将在本地表上创建与所指定 SQLSelectString 相关的 PRIMARY KEY 约束。这是默认设置。

  9. TRACKINGONWITHINDEXES
  10. 2
  11. SQL Server Compact Edition 跟踪对本地表的所有更改。将在本地表上创建的 SQLSelectString 中所指定的 SQL Server 表的索引和 PRIMARY KEY 约束。

  12. TRACKINGOFFWITHINDEXES
  13. 3
  14. SQL Server 不跟踪对所请求表的更改。但是,将在本地表上创建的 SQLSelectString 中所指定的 SQL Server 表的索引和 PRIMARY KEY 约束。


  15. 备注
  16. 当指定 TRACKINGON 或 TRACKINGONWITHINDEXES 时,SQL Server Compact Edition 将跟踪在本地表中插入、更新或删除的每条记录。当指定 TRACKINGON 时,将在请求的表上创建 PRIMARY KEY 约束。当指定 TRACKINGONWITHINDEXES 时,将在请求的表上创建 PRIMARY KEY 约束和相关索引。仅当请求组成索引的列时才会创建索引。

  17. 当 RDA_TRACKOPTION 设置为 TRACKINGON 或 TRACKINGONWITHINDEXES 时,将应用下列限制条件:

  18. 如果 SqlSelectString 语句返回不可更新的记录集,将出现错误。

  19. 必须在 SELECT 语句返回的可更新记录集上定义主键。

  20. SELECT 语句可以引用视图或存储过程,但是引用的视图或存储过程必须仅引用一个表,并且必须是可更新的。

  21. 当指定 TRACKINGONWITHINDEXES 时,将根据 LocalTableName 中指定的 SQL Server Compact Edition 本地表,创建位于 SQL Server 表上且与 SQLSelectString 中所指定列相关的索引。

  22. 注意   如果用户要更新设备上的请求表,然后将更改的记录推送回原始的 SQL Server 表,则必须指定 TRACKINGON 或 TRACKINGONWITHINDEXES。当应用程序调用 Push 方法时,SQL Server Compact Edition 将使用更改跟踪信息在本地 SQL Server Compact Edition 表中查找已插入、更新和删除的记录,并将这些更改传回 SQL Server。


回复评论 (15)

那表是肯定不存在的。
点赞  2009-3-4 15:49
RDA拉数据时,要确保SQLCE没有目标表
点赞  2009-3-4 20:13
引用: 引用 2 楼 feishanm 的回复:
RDA拉数据时,要确保SQLCE没有目标表


肯定没有的,数据库是新建的,我试了N次的。

要是参数设为不跟踪数据,就能拉数据,

但设置为跟踪数据时,就不能了,提示表已经存在了。
点赞  2009-3-5 12:40
顶下,还没解决。
点赞  2009-3-6 11:22
still.
点赞  2009-3-9 13:31
关注.
点赞  2009-3-10 12:42
关注
点赞  2009-3-10 13:01
引用: 引用 7 楼 91program 的回复:
关注

点赞  2009-3-23 09:22
关注
点赞  2009-3-23 10:11
帮你顶
点赞  2009-3-23 16:19
帮顶!
点赞  2009-3-25 09:08
顶下,解决不了。
点赞  2009-4-22 16:11
不会吧。你应该是有目标表了吧。你重新用SqlCeEngine创建一个数据,然后用SqlCeRemoteDataAccess里的Pull方法,参数为TrackingOn。试试。不会报错吧。表被PULL下来以后就不要用PULL方法了,除非你将PULL下来的表删除了。
点赞  2009-4-24 16:33
引用: 引用 13 楼 dawei_sun 的回复:
不会吧。你应该是有目标表了吧。你重新用SqlCeEngine创建一个数据,然后用SqlCeRemoteDataAccess里的Pull方法,参数为TrackingOn。试试。不会报错吧。表被PULL下来以后就不要用PULL方法了,除非你将PULL下来的表删除了。


已经试验了无数次。

数据文件是用query analyzer 创建的。

新创建的也会提示表已经存在,而且改成TrackingOff就可以PULL了。
点赞  2009-4-27 09:15
还未解决。
点赞  2009-5-14 09:47
电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 京公网安备 11010802033920号
    写回复