开发环境: windows2003,安装了vs2008、SQL Server2005,这是基础(当然用vs2003,vs2005,SQL Server2000啥的也可以,不过新的总是功能强大些么,呵呵); 因为开发时绝大部分时间是在模拟器上调试,而不是PPC,所以模拟器是必须安装的。针对你的PPC操作系统选择对应的模拟器与sdk包,我安装的是WM6中文版的。(windows mobile 6 professional sdk.msi、Windows Mobile 6 Professional Images (CHS).msi); 然后是SQL Server2005 CE的sdk(SQL Server 2005 Compact Edition SDK.msi); 最后是用来管理PPC与电脑通讯的ActiveSync(MicrosoftActiveSync_setup_cn.msi); 以上软件全部可从微软官方网站免费下载。 开始新建一个项目: 选择类型,目标平台选择你想要的。后面也可以修改。 程序是在PPC上跑的,到时候会在上面运行SQL Server CE。把dll引用一下。 接着就开始编程!跟普通的.NET程序没有任何区别,就是设计视图跟移动设备一样。下面是登录页面与查询页面。 下面介绍一下SQL Server CE与SQL Server的数据操作问题。网上有很多介绍相关内容的,这里只说重点: 我们的程序在PPC上跑,数据源可能是PPC本地的CE数据文件(.sdf),也可能是远程Server上的SQL Server数据库。如果是本地CE文件,使用System.Data.SqlServerCe命名空间下的几个类:SqlCeConnection(管理连接)、SqlCeCommand(sql命令)、SqlCeDataAdapter(适配器)、SqlCeTransaction(如果你需要使用事务)等即可,与System.Data下的那几个类对应,用法也一样。例如:执行一个SQL: private SqlCeConnection _Connection = null; private string _LocalConnectionString = ""; public int ExcuteNoneQuery(string strSQL) SqlCeCommand command = _Connection.CreateCommand(); int iRows = 0; try return iRows; 返回一个DataTable: public DataTable ExeceuteDataTable(string strSQL) try return dt; 如过数据源在远程Server上,就要麻烦一点。这是因为微软构建的数据通讯思路是这样的:当你查询数据时,首先需要将SQL Server上的数据下载到本地设备的SQL Server CE数据库里;然后再针对本地数据进行查询。当你想更新数据时,可以更新本地数据后再同步回SQL Server,也可以直接更新SQL Server,视你的业务逻辑需要而定。上述功能是通过System.Data.SqlCeRemoteDataAccess这个类实现的。主要方法有3个:Pull(从远程数据源下载数据到本地ce表。注意一次只能一个表,并且本地ce库中不能存在该表,有的话需先删除)、Push(将ce跟踪的某个表在本地的更改数据同步回server。注意必须在Pull方法中启用跟踪)、SubmitSql(针对远程Server执行一个无返回行的Sql语句,如insert、update、delete)。通讯的原理如下:在PPC上运行着一个客户端代理,在Server上运行着一个服务端代理,2者通过IIS通讯传递数据,也就是说,使用的是Http或Https协议。PPC上应用,调用客户端代理,通过IIS,访问服务端代理;服务端代理再访问SQL Server数据库,通过IIS返回数据给客户端代理,最后客户端再返回给PPC应用。所以,在程序能够正常运行前,配置IIS也是至关重要的一步。 首先Vs会在Program Files\Microsoft SQL Server 2005 Mobile Edition\Server 目录下创建一个与你项目同名的目录。本项目是TestMobile目录。将Server目录下的sqlcesa30.dll拷贝到你的项目目录下。这个文件就是ce的服务端代理。客户端代理就不需要配置了,到部署的时候,vs自动就会安装好,不劳我们动手了。 接着到IIS里设置一下虚拟目录。 设置访问安全验证。如果这里不是匿名访问,则在程序中需配置访问IIS的用户名、密码。 在IE中输入配置的地址,如果配置顺利的话,你将看到如下内容。这表示代理配置成功了: OK,接着看代码。本项目主要用来查询信息,首先用户登录,登录完毕后可以选择查询车辆信息,或者输入信息立案(业务上的内容就不介绍了)。涉及到的数据库有3部分,1是远程Server上的车辆信息,量大;2是本地ce业务库,放一些标准选项数据,如车牌颜色(蓝、黄、白等)用来提升程序的性能(要知道,频繁的访问远程server的速度很慢。);3是本地ce临时库,用来在查询server上的数据时临时存储在本地。 登录:登录一般是到远程Server中验证(当然你也可以把用户信息放到本地)。登录窗口是项目的起始窗口,在登录时,首先看看临时库有没有,有的话就删除重新创建。 //加载配置 if (File.Exists(GetSettings._LocalTmpDbFile)) 接着就是用户身份验证。 /// <summary> DataAccess daTmp = new DataAccess(GetSettings._LocalTmpConnectionString); try daTmp.Open(); if(dt.Rows.Count == 0) 这里封装了一个数据访问对象DataAccess,里面就是使用的SqlCeRemoteDataAccess与SqlCeConnection。用来提供数据访问方法,在构造时指定数据库连接,以确定是访问本地临时库,还是本地业务库。因为验证用户是访问server上TS_User表,要临时存储在本地,所以这里使用临时库。可以看到验证过程分为2部分:1是先将数据下载到本地临时库中;2是再从临时库中查询。如果临时库中没有符合的记录,说明验证未通过;反之通过。注意System.Data.SqlServerCe.RdaTrackOption.TrackingOff,表示ce不跟踪对TS_User表的变化,因为我们只是查,不对数据更新。 查询车辆与验证用户身份在数据操作上是一样的,这里略。 再来看看立案处理,需要往server上写数据。 private void btnLA_Click(object sender, EventArgs e) DataAccess daTmp = new DataAccess(""); try MessageBox.Show("立案成功!"); 抱歉,微软鼓吹的SqlCeRemoteDataAccess同步功能还没用到!!-_-||| 因为业务逻辑不需要嘛,下次用到了在写,很简单的,网上资料一大把。就是将数据先Pull下来,在本地修改,然后Push回去。 说一下SqlCeRemoteDataAccess的几个重要属性:InternetUrl(就是IIS设置的服务端代理的地址,形如:http://ServerIP/TestMobile/sqlcesa30.dll)、InternetLogin、InternetPassword(这2个就与前面IIS身份验证那有关。如果IIS是匿名访问,则这2个属性赋为空即可。)LocalConnectionString(指定ce临时库连接串)、oleDBConnectiongString(指定Server上的数据库连接串) 最后来看看调式与部署吧。启动调试,选择对应的模拟器。 选择部署,vs会将相关环境全部部署到模拟器里,如果是PPC的话也一样,包括.net CF、SQL CE CF等。 接着模拟器变开始运行,我们在“工具”-“仿真设备管理器”中将仿真设备管理器调出,点击对应模拟器,右键“插入底座”。 这时模拟器便通过AciveSync与计算机建立了连接。 通过ActiveSync浏览,可以看见程序默认被部署到了模拟器的Program Files目录下。 关于真正部署到PPC:过程与部署到模拟器一样,只是在部署前需要先设置一下PPC的IP,一般127.0.0.1即可;保证PPC通过-ActiveSync与计算机连接通畅;vs中“工具”-“选项”-“设备工具”-“设备”-“Windows CE”-“属性”,将传输改为TCP,并配置使用指定的IP地址,输入你的PPC的IP。接下来就与部署模拟器一样了。 OK,至此基于SQL Server CE的移动应用的基础开发变介绍完毕了。 http://hi.baidu.com/photobycaizi/blog/item/554379ae7cd39fd87cd92afd.html |