关于window移动应用开发的网络资源很多,webcast就是其中很好的学习资料,微软免费开放这些教程目的就是为了让我们这些刚刚入门的初学者能够更迅速地跨过这个门槛,当然门槛后面还有更丰富的内容有待我们去探索。关于windows mobile的webcast很多,粗略数了下不包括最近新出的有将接近百个,如果按照两天一个视频的速度的话,也得小半年才能看得完,但我们不可能老耗在这个上面,我们还有我们的工作,所以如何去筛选这些资源成为一件很重要的事,一般我们都是根据自己的需求应用去学习。希望这篇文章能对你筛选这些资源带来一点帮助。
<span id="eventInfo_lblEventDescription"> 随着SQL Server 2005的正式发布,Windows Mobile开发者关心的SQL Mobile 2005也加入了很多新的功能。在这次课程中我们将讲述SQL Mobile 2005与SQL Server 2005进行远程连接和数据交换的两种主要方式——Replication和Remote Date Access。我们将用实际的例子来讲述如何安装SQL Mobile 2005的Server Tools,如何配置SQL Server 2005数据库,以及如何在应用程序中实现远程数据访问和交换。
笔记:
前几天看了Winodws Mobile应用程序中关于数据访问及操作的几种方式,但基本都是简单地了解下其优缺点,并未深入地去学习其中的实现方式。看这个webcast时是带着两个疑问来看的,这两个疑问包括:1、为什么要有SqlMobile,直接连接SqlServer不是更方便;2.使用WebService与使用SqlMobile的取舍,何时该使用WebService,何时该使用SqlMobile。
马宁老师讲关于SqlMobile的教程共有三讲,这是其中一讲,从数量上就可以看得出SqlMobile在我们开发Winodws mobile应用程序中的重要性了,截下来的几天我将陆续学习这些教程。感到很有收获的是马宁老师刚开始关于SqlMobile数据同步的介绍中就解决了我的第一个疑惑。因为手机与我们的PC机的差别,手机都是通过无线的方式访问网络,无线的方式也造成了网络的不稳定,SQL Mobile可以当成手机的一种缓存机制,当手机连接上网络后SqlMobile可以将修改的数据通过RDA或者合并复制到远程的SQL SERVER上去,这两种方式去年在学习mobile的过程中也曾了解过,但并没有去应用它,一般我都是通过webservice来操作远程的数据库,而且平时练习的时候用的也都是模拟机,所以常常忽略了手机网络传输的劣势。(模拟器会自动通过本地代理Http连接到网络)
感觉下面的这张截图比上次那张能更明了的了解SqlMobile的模型(忽略那个小手,嘿嘿,截图失误。)
从这张图中可以看得出,应用程序通过安装在设备上的SQL Server CE Engine访问及操作本机上的SqlServer CE,从客户端这个设备将数据同步到服务器上经过了两个步骤,首先通过Http协议访问到架在IIS上的一个SqlServer CE Server Agent,这是一个ISAPI(所以当我们部署程序时,必须保证服务器端安装了Sql Server Tools,它是访问SQL SERVER的代理),关于客户端及服务器环境的搭建可以看这篇文章
图中的同步方式我们有两种方法可以实现它,第一个是RDA,第二个是合并复制.首先来看下RDA,先来了解下RDA,什么是RDA?
一、RDA(Remote Data Acess)
RDA的功能主要包括:1、下载数据;2、捕捉和上传数据;3、提交执行SQL语句;4、支持Http协议,支持SSL加密;5、支持无线传输协议(Wi-Fi、GPRS、CDMA、3G)
从编程的角度看,或许下面这些你更感兴趣:
使用RDA要先将System.Data.SqlServerCe.SqlCeRemoteDataAccess命名空间引用进来,它是位于System.Data.SqlServerCe命名空间底下的。创建RDA:
设置rda连接的本地数据库的连接字符串:
设置rda同步的的服务器的Sql Mobile Server Agent ,它是位于IIS上的一个ISAPI
接下来我们就可以让这个rda对象为我们做些关于同步的事情了。它包含了三个主要的方法:
(1) rda.Pull():(从SQL SERVER 数据库下载数据到设备端)
我们看下pull方法的这几个参数:"ZDXMMAILTB"是存放在SQL Mobile上的表,用于存放从服务器同步下来的数据,"Select Top 10 * from ZDXMMAILTB"设置从Sql Server获取数据集的SQL语句,rdasqlConnection是用于指定Sql Server的连接字符串,trackOption参数用于SQL Mobile数据表的数据跟踪设置,指定RdaTrackOption枚举变量,"ErrorTable"用于存放Push方法时发生冲突的错误信息.这些都是些基本的概念,感兴趣的可以亲自去操作下,相信你的体会会更深.下面这张表是介绍关于trackOption参数的一些使用场景:
值 | 解释 |
TrackingOff | SQL Mobile不会跟踪本地数据改变,PRIMARY KEY约束在本地创建 |
TrackingOffwithIndexes | SQL Mobile不会跟踪本地数据改变,存在于SQL Server数据表中的索引和PRIMARY KEY约束会被在本地表创建。 |
TrackingOn | SQL Mobile会跟踪本地数据改变,PRIMARY KEY约束在本地创建,这是默认设置(pull的服务器的表必须包含主键) |
TrackingOnWithIndexes | SQL Mobile会跟踪本地数据改变,存在于SQL Server数据表中的索引和PRIMARY KEY约束会被在本地表创建。(pull的服务器的表必须包含主键) |
(2) rda.Push():(把SQL Mobile本地表的修改结果传递回SQL Server数据库中)
我们来看下Push方法的这几个参数:localTableName是SqlMobile通过Pull方法获取的表,这个表不能是一个SQL Mobile普通的本地数据表;也不能是Pull方法设置为TrackingOff时获取的表。oleDBConenctionString依然是Pull方法中的连接服务器SqlServer的连接字符串,batchOption参数是用于设置我们的数据是否批量提交,该参数是一个RdaBatchOption枚举变量。如果设置成BatchingOff,被修改的数据将被逐条提交,如果其中某些数据产生冲突,将不会影响另外数据的提交,但是这样的问题是数据量会增加,这也是默认选项;BatchingOn会将所有发生改变的数据记录批量提交。
(3)rda.SubmitSql():(该方法会将一个SQL语句提交到SQL Server服务器中执行)
为什么还需要这样的方法呢。如果我们需要写一个数据捕捉的程序,将捕捉到的数据提交到SQL Server服务器中。如果使用Pull方法从SQL Server获取一个数据表,然后向其中添加新数据,然后再使用Push方法提交到SQL Server中,这样十分麻烦,所以直接使用SubmitSql方法直接将SQL语句提交到SQL Server中执行就可以了。
RDA小结:在自己实践利用RDA进行本地与远程数据同步后感觉RDA使用起来较为方便,不用在服务器上配置SQL SERVER,不像合并复制那样配置繁琐,但性能及可操作性及灵活性与合并复制差了很多,因为RDA每次只能同步一张表,而且每次同步之前须删除以前存在的数据库,重新下载数据,而且不能跟踪服务器的变化,因此我想RDA可能只适合应用在局域网等网络传输较快的网络,或者数据量较小的操作。其他的环境还是得依靠合并复制。
二、合并复制
关于合并复制Rob Tiffany出了小本书专门讲解这一块,这里提供这本电子书的PDF文件供大家下载:(一)
因为PDF文件实在是太大了总共加起来有17.5M,博客园上传空间有限,因此这里只提供一个小节的下载,有兴趣的可以留下邮箱我发给你们,如果以后有时间的话将其翻译出来提供给大家。下面是合并复制的模型图:
与RDA比起来,合并复制在模型上与其类型,所不同的是合并复制并没有像RDA那样IIS通过OLE DB Provider与数据库进行交互,而是通过SQL SERVER Replication Provider和SQL Server Mobile Replication Provider与其进行交互。这点差别也造成了合并复制在配置上的繁琐。限于篇幅,这里就不再介绍合并复制的配置。以后的博客会详细介绍它的配置。
最后还是总结(RDA与Merge And Replication的不同):
RDA | Merge And Replication |
不需要设置SQL Server | 需要设置SQL Server |
不会跟踪Server数据改变 | 跟踪所有数据库的更改 |
不需要占用Server空间 | 冲突管理数据表和跟踪信息需要占用更多内存 |
每次更新数据前必须删除以前数据 | 初始化数据后每次只需要同步被修改的数据 |
每次调用只能同步一张表 | 一次调用可以同步多张表 |