黎波

Windows Mobile Development for Line of Business
posts - 186, comments - 1266, trackbacks - 43, articles - 0
  博客园 :: 首页 :: 新随笔 :: 联系 :: 订阅 订阅 :: 管理

去年曾经在公司讲过“SQL Server Mobile 2005 程序开发”系列课程,系统地介绍了 SQL Mobile 各方面知识。鉴于很多朋友经常会问我一些 SQL Mobile 开发的问题,所以现在将该课程的 Slides 和 demos 提供给大家参考。希望这些资料对大家学习 SQL Mobile 开发有帮助。

本系列课程由5节课组成,内容覆盖了 SQL Mobile 的功能概述、数据库引擎(SqlCeEngine)编程、结果集(SqlCeResultSet)、远程数据访问(RDA)和合并复制(Merge Replication)等方面。

第一节课:概述

SQL Server Mobile 概述
SQL Server Mobile 的功能
与 SQL Server 2005 集成
与 Visual Studio 2005 集成

第二节课:数据库引擎

数据库引擎的编程
查询分析器的使用
独有的数据访问对象
利用数据源快速创建应用程序

第三节课:结果集

什么是 SqlCeResultSet?
强类型的 SqlCeResultSet
SqlCeResultSet 的数据绑定

第四节课:远程数据访问

配置 Web 同步向导
远程数据访问(RDA)
SqlCeRemoteDataAccess 的属性
SqlCeRemoteDataAccess 的方法
演示用 RDA 方式同步数据

第五节课:合并复制

原理和架构
支持的功能
创建发布
创建订阅
与RDA的比较

相关下载:
第一节课的Slide

第二节课的Slide
第三节课的Slide
第四节课的Slide
第五节课的Slide
系列课程的示例代码

示例代码中用到的 Northwind.sdf 数据库文件可以在 C:\Program Files\Microsoft Visual Studio 8\SmartDevices\SDK\SQL Server\Mobile\v3.0 目录下找到。

需要安装 Windows Mobile 5.0 SDK for Pocket PC 后才能正常打开实例代码,否则需要在打开项目后,在 Visual Studio 2005 中将项目的平台更改为 Pocket PC 2003 即可。

未经本人同意,不得任意转载,谢谢合作!

Feedback

#1楼    回复  引用  查看    

2007-03-18 01:05 by T.t.T!Ck.      
Good
我来支持你了

虽然还没有开始搞SQL Mobile 但是先了解一下

#2楼    回复  引用    

2007-03-18 10:22 by zqonline [未注册用户]
第二个压缩包,是第一节。
第一个压缩包,是第二节。


看看。

#3楼 [楼主]   回复  引用  查看    

2007-03-18 11:12 by Bob Li      
@zqonline
已经修复,谢谢你的提醒!

#4楼    回复  引用  查看    

2007-03-18 21:54 by Bention      
牛人啊。

#5楼    回复  引用  查看    

2007-03-19 08:44 by Jeffers Yuan      
主要是集中在了数据上面,有没有其他方面的?

#6楼 [楼主]   回复  引用  查看    

2007-03-19 09:23 by Bob Li      
@Jeffers Yuan
目前没有

#7楼    回复  引用    

2007-03-19 09:44 by 安徽广播电视报 [未注册用户]
谢谢,很有帮助!

#8楼    回复  引用    

2007-03-20 12:40 by yang [未注册用户]
实例代码我运行后,总是Error - Initialize database报这个错误,运行Northwindoledb这个程序需要进行什么设置吗

而且在windowsmobile5。0模拟器上运行找不到oledb.h,oledberr.h,ssceoledb30.h
在ppc2003模拟器上运行就没问题,这是为什么??

#9楼 [楼主]   回复  引用  查看    

2007-03-20 13:28 by Bob Li      
@yang
我这里提供的示例代码没有Northwindoledb这个示例,而且都是用
C#编写的,不需要引用oledb.h,oledberr.h,ssceoledb30.h等C++的头文件。
请问你的开发工具是什么?Northwindoledb是哪里得到的?

#10楼    回复  引用    

2007-03-20 13:54 by yang [未注册用户]
我的是sqlservermobilesdk里自带的代码实例,它是用c写的
C:\Program Files\Microsoft SQL Server 2005 Mobile Edition\Samples
我是用vs2005开发。

#11楼 [楼主]   回复  引用  查看    

2007-03-20 15:28 by Bob Li      
@yang
“Error - Initialize database”这个错误是由于你的Windows Mobile 5.0模拟器没有安装SQL Server Mobile导致的。用Visual C++ 2005开发SQL Mobile应用程序,需要手动将SQL Mobile安装包复制到设备上安装。
你可以在下面的路径下找到SQL Mobile的安装包:
C:\Program Files\Microsoft Visual Studio 8\SmartDevices\SDK\SQL Server\Mobile\v3.0\wce500\armv4i
关于SQL Mobile的部署我在第一节课的Slide的17页中有说到。

#12楼    回复  引用    

2007-03-20 16:23 by yang [未注册用户]
而且在windowsmobile5。0模拟器上运行不需要这三个文件吗oledb.h,oledberr.h,ssceoledb30.h,我的模拟器运行时说找不到。
在这个目录下加入那些头文件后又会报更多的其他的错误C:\Program Files\Windows CE Tools\wce400\STANDARDSDK\Include\Armv4i。


SsceOleDB.h, ca_mergex30.h, and Ssceerr30.h这三个文件我也加进去了

我再试试。

#13楼    回复  引用    

2007-03-20 16:29 by yang [未注册用户]
这个文件夹下有9个文件都装吗?
sqlce30.dev.ENU.phone.wce5.armv4i.CAB
sqlce30.dev.ENU.ppc.wce5.armv4i.CAB
sqlce30.dev.ENU.wce5.armv4i.CAB
sqlce30.phone.wce5.armv4i.CAB
sqlce30.ppc.wce5.armv4i.CAB
sqlce30.repl.phone.wce5.armv4i.CAB
sqlce30.repl.ppc.wce5.armv4i.CAB
sqlce30.repl.wce5.armv4i.CAB
sqlce30.wce5.armv4i.CAB
他们代表了什么意思?

#14楼 [楼主]   回复  引用  查看    

2007-03-20 16:29 by Bob Li      
@yang
我直接在VS2005打开Northwindoledb的项目就可以编译了,不需要做任何修改。一开始在WM5模拟器运行就会报“Error - Initialize database”错误,在我安装了sqlce30.dev.CHS.ppc.wce5.armv4i.CAB,sqlce30.ppc.wce5.armv4i.CAB和sqlce30.repl.ppc.wce5.armv4i.CAB后就可以顺利运行了。

#15楼 [楼主]   回复  引用  查看    

2007-03-20 16:33 by Bob Li      
@yang
sqlce30.dev.*.cab 是设备上的查询分析器,sqlce30.repl.*.cab 是合并复制的运行库,sqlce30.*.cab 是SQL Mobile核心运行库。
phone.wce5 表示 WM5 Smartphone,ppc.wce5 表示 WM5 Pocket PC,剩下的 wce5 表示 WinCE5。

#16楼    回复  引用    

2007-03-20 16:40 by yang [未注册用户]
上述文件安装完之后,在stdafx.h中加入了SsceOleDB.h, ca_mergex30.h, and Ssceerr30.h这三个头文件。
报如下错误:
d:\网上实例\wm5.0\sql处理程序\northwindoledb\northwindoledb\stdafx.h(39) : fatal error C1083: Cannot open include file: 'oledb.h': No such file or directory
然后查询oledb.h文件在C:\Program Files\Windows CE Tools\wce400\STANDARDSDK\Include\Armv4i。这个目录下,就加入到了工程中。
重新编译后错误33个警告456个。主要的错误如下:
C:\Program Files\Windows CE Tools\wce400\STANDARDSDK\Include\Armv4i\objidl.h(10704) : error C4430: missing type specifier - int assumed. Note: C++ does not support default-int
C:\Program Files\Windows CE Tools\wce400\STANDARDSDK\Include\Armv4i\shobjidl.h(1878) : error C4430: missing type specifier - int assumed. Note: C++ does not support default-int
D:\Program Files\Windows CE Tools\wce500\Windows Mobile 5.0 Pocket PC SDK\include\ARMV4I\aygshell.h(311) : error C2061: syntax error : identifier 'SIPSTATE'

注释掉'oledb.h',oledberr.h,ssceoledb30.h后,还是上诉错误,但警告没有了。

#17楼    回复  引用    

2007-03-20 16:52 by yang [未注册用户]
但是在ppc2003模拟器上运行程序成功,没有做如上修改的前提下(注释掉'oledb.h',oledberr.h,ssceoledb30.h)。这是为什么?

#18楼    回复  引用    

2007-03-20 17:00 by yang [未注册用户]
那奇怪了为什么我在wm5.0的ppc模拟器上运行就是报错
d:\网上实例\wm5.0\sql处理程序\northwindoledb\northwindoledb\stdafx.h(39) : fatal error C1083: Cannot open include file: 'oledb.h': No such file or directory
northwindoledb.cpp
d:\网上实例\wm5.0\sql处理程序\northwindoledb\northwindoledb\stdafx.h(39) : fatal error C1083: Cannot open include file: 'oledb.h': No such file or directory
stdafx.cpp
d:\网上实例\wm5.0\sql处理程序\northwindoledb\northwindoledb\stdafx.h(39) : fatal error C1083: Cannot open include file: 'oledb.h': No such file or directory

#19楼 [楼主]   回复  引用  查看    

2007-03-20 17:06 by Bob Li      
@yang
是不是你的开发环境有问题?

#20楼    回复  引用    

2007-03-20 17:19 by yang [未注册用户]
我用的是wm5。0英文的模拟器。
那我重新装vs2005?
还是我的sdk里少了这个'oledb.h'头文件?
奇怪的是ppc2003上运行好使?
这回郁闷了

#21楼    回复  引用    

2007-03-21 15:53 by yang [未注册用户]
我重新装过了vs2005(英文版)还是不好使,在wm5。0的模拟器(英文版)上就是报错,在ppc2003模拟器上运行就没问题。

请问vs2005需要什么设置吗,在运行这些程序时。

#22楼 [楼主]   回复  引用  查看    

2007-03-21 16:41 by Bob Li      
@yang
安装完VS2005,再安装WM5SDK,应该就行了。
如果还有问题,我们通过邮件讨论吧。
china.libo AT gmail.com

#23楼    回复  引用    

2007-03-23 12:13 by yang [未注册用户]
您好,我发的邮件您收到了吗?

#24楼    回复  引用    

2007-04-02 21:27 by 轩辕 [未注册用户]
请问你下,为什么在我的计算机上安装Device Emulator 2.0中文版后,但是一直找不到中文的模拟器。这是为什么呢?

#25楼    回复  引用    

2007-05-12 12:13 by ma [未注册用户]
我碰到的情况跟yang一样,请问,现在你解决这个问题了吗?

#26楼    回复  引用    

2007-05-14 17:07 by 小豆 [未注册用户]
SQL Server CE2.0 RDA 的问题请教:我用RDA下载了数据后,为什么不能修改呢?使用索引跟踪模式下载,此时所有表都可以访问,如果对记录进行修改后,这个表将不能访问,除非将数据回推到SQLServer。访问方式使用OLDB的ATL模板。非常急,谢谢!0374-3212849 zhongshand@xigc.com

#27楼 [楼主]   回复  引用  查看    

2007-05-14 20:56 by Bob Li      
@小豆
我用RDA下载了数据后,为什么不能修改呢?
->如何修改呢?
使用索引跟踪模式下载,此时所有表都可以访问,如果对记录进行修改后,这个表将不能访问,除非将数据回推到SQLServer。
->进行了什么修改?不能访问是指?

总体上你的问题我不清楚是什么回事

#28楼    回复  引用    

2007-07-03 20:39 by csla [未注册用户]
我的博客:http://csla.blog.sohu.com/

#29楼    回复  引用    

2007-07-06 10:58 by fairyll [未注册用户]
你好,我是初学者,在连接数据库的时候,总是连不上,提示:找不到请求的.net framework数据提供程序。可能没有安装。
可是,我机器里明明装了sql server mobile了,怎么说没有安装呢?想请教一下高手。

#30楼 [楼主]   回复  引用  查看    

2007-07-06 18:23 by Bob Li      
@fairyll
可能你安装SQL Server Mobile失败了,System.Data.SqlServerCe.dll没有成功注册到GAC。有一个解决的办法是将System.Data.SqlServerCe.dll部署到应用程序的目录下,让你的应用程序可以找到。

#31楼    回复  引用    

2007-07-31 09:56 by gh [未注册用户]
感谢感谢!

#32楼    回复  引用    

2007-07-31 11:01 by ghd [未注册用户]
用你提供的demo运行成功了。让我学习PDA更明了,感谢黎波!
我的环境是:win2003 sp1+sql 2000 sp3,Serve ce2.0+sp3,Mobile 5.0 PPC SDK,VS2005

#33楼    回复  引用  查看    

2007-08-08 23:50 by Justin Shen      
每课大概是多少时间呢?
曾经给东软讲了一个类似的一天的课程,似乎时间上有一点赶。

#34楼    回复  引用  查看    

2007-08-09 09:21 by 黎波      
@Justin Shen
每节课大约30~40分钟

#35楼    回复  引用    

2007-08-10 14:48 by William [未注册用户]
有点帮助,但幻灯片不太详细,如何操作VS不清楚,因为我是新手,所以有了更多的疑问.有更详细的视频吗?

#36楼    回复  引用    

2007-08-15 23:50 by tomly [未注册用户]
不错啊,支持一下

#37楼    回复  引用    

2007-08-17 16:07 by deng [未注册用户]
xiexie

#38楼    回复  引用    

2007-10-10 15:21 by Marx.Bowen [未注册用户]
问题如下:如果一个表(tableA)包含主键id,多个人用
rda.Pull("tableA", "select id,name from tableA where 1<>1", oleDBconnectString, RdaTrackOption.TrackingOn, "A_error");
然后各自往表里添加了数据,那么再用
rda.Push("tableA", oleDBconnectString, RdaBatchOption.BatchingOn);
提交数据,会不会产生主键冲突?也就是说能不能提交成功?
因为多人的话,每个人添加的数据就会有相同的主键。

#39楼 [楼主]   回复  引用  查看    

2007-10-10 20:11 by 黎波      
@Marx.Bowen
冲突的可能性非常大!
你要想办法产生一个唯一的ID。可以给每一台设备设置一个较短的机器编码,或者用登录用户的编码,来结合自增长的ID;或者用Guid,或者用时间的Tick值。推荐用Guid或时间Tick+机器编码
参考下面的实现:
http://www.cnblogs.com/upto/archive/2005/11/23/282283.html

#40楼    回复  引用    

2007-10-20 15:34 by hqf [未注册用户]
支持楼主

#41楼    回复  引用    

2007-12-27 08:55 by FeAR_KilleR [未注册用户]
Thx for ur share lorz...

#42楼    回复  引用    

2007-12-27 14:49 by ligangok [未注册用户]
请问黎波:我在远程同步数据时,爆出“标识列必须为整数或大整数类型,且不能为空”难道数据表中的字段就不能有“标识"属性吗?

#43楼 [楼主]   回复  引用  查看    

2007-12-27 22:33 by 黎波      
@ligangok
如果加了 RdaTrackOption.TrackingOn 或 RdaTrackOption.TrackingOnWithIndexes 参数,就不可以用标识列。因为标识列是自增长的,没法控制主键的唯一性。

#44楼    回复  引用    

2008-01-23 21:52 by blackbluez [未注册用户]
我想实现SQL Server Mobile 和SQL Server 2005 之间的数据同步功能,但用SQL Server Management studio express 打开SQL Server 2005 时,发现"复制"菜单下只有"本地订阅"功能,但却没有"发布"功能,怎么才能打开"发布"功能呀??(我使用的是Microsoft SQL Server Enterprise Edition,可以实现RDA.)谢谢~

#45楼 [楼主]   回复  引用  查看    

2008-01-24 11:30 by 黎波      
@blackbluez
SQL Server Management studio express 是针对 sql server express edition (sse)的,而sse是不具备发布功能,只支持订阅功能,所以你只能看到本地订阅。既然你已经安装了sql server 2005 enterprise,为何不用自带的SQL Server Management studio打开sql server 2005 enterprise呢?

#46楼    回复  引用    

2008-01-25 09:49 by blackbluez [未注册用户]
搞掂了~多谢你的PPT,多谢你的回复!

#47楼    回复  引用    

2008-02-24 00:28 by xiaoblack [未注册用户]
有一问题想请教:我在VS2005中使用WinCE5.0模拟器运行您的例子是没问题的,但使用真的WinCE5机器运行您的程序就出现:<无法找到 PInvoke DLL“sqlceme30.dll”。>的错误!sqlce30.wce5.armv4i.CAB、sqlce30.repl.wce5.armv4i.CAB、sqlce30.dev.chs.wce5.armv4i.CAB这几个包都已经是安装了,而且我对比了WinCE5.0模拟器和WinCE5机器上装的.dll文件都是一样的,也都发现了在\windows下有sqlceme30.dll这个文件,为什么WinCE5机器上会找不到sqlceme30.dll呢??晕,在网上也看到有些人遇到同类问题,使用他们说的解决方法,都不行,搞了几天,困惑呀~

#48楼    回复  引用    

2008-04-25 16:58 by zcc [未注册用户]
请问一下楼主,例子都是C#的代码, 如果用C++的话能不能连接数据库呢?
不会C#, 只是问一下C++能否实现这样的功能,MSDN中只是给出了几个函数说明,没有使用的例子,

#49楼 [楼主]   回复  引用  查看    

2008-05-06 12:59 by 黎波      
@xiaoblack
这个问题可能跟ROM有关,最好把SQL Mobile 2005定制到ROM上去。

#50楼 [楼主]   回复  引用  查看    

2008-05-06 13:00 by 黎波      
@zcc
SQL Server Mobile 2005的程序目录下有带了一个通过oledb方式访问Northwind.sdf数据库的例子,应该比较全面,你可以参考一下。听说C++通过oledb访问sqlce数据库操作比较繁琐,我没有做过。

#51楼    回复  引用    

2008-05-15 15:58 by charles.chen [未注册用户]
请教一下楼主,服务器端要怎么设置?我的服务器是2003,sql server 2005,装了iis.要把数据库放在哪里?谢谢!

#52楼    回复  引用    

2008-05-29 10:36 by billwater [未注册用户]
谢谢了。正好需要这样的资料

#53楼    回复  引用    

2008-07-10 22:15 by fasasas [未注册用户]
我碰到和yang以前提到的一样的问题,
在wm5.0平台上
Cannot open include file: 'oledb.h': No such file or directory
请询问是如何解决的?
十分感激

#54楼 [楼主]   回复  引用  查看    

2008-08-20 18:08 by 黎波      
@charles.chen
IIS要能访问到数据库服务器。

#55楼    回复  引用    

2008-08-26 11:37 by dawei_sun [未注册用户]
我出现的问题和#47楼是一样的.而且我在模拟器上都会出现这种错误不知道怎么办了.你指教.

#56楼    回复  引用    

2008-09-17 20:20 by pjtian [未注册用户]
向你请教一个问题:
在Sql mobile 中的一个动态表格中(表格在不断的扩大),我每隔一段时间去前10位.在sql server 中.我可以用: select top 10 * from tablename order by id desc ,可是我在sql mobile 发现"top"不能用,你能不能告诉我要实现这个功能要如何解决啊?

#57楼    回复  引用    

2008-09-22 19:11 by zgl [未注册用户]
你好,我想问一下,如何用c#做出比较精致的设备应用程序界面,我现在只会简单的更改程序的背景色,文字等,可是想把自己制作的图片作为应用程序背景应该怎么做,还有,我是刚开始做pda的,都是这看一点那看一点,能不能给我指个主线,谢谢了先·

标题  
姓名  
主页
Email (博主才能看到) 
验证码 *  看不清,换一张 [登录][注册]
内容(请不要发表任何与政治相关的内容)  
  登录  使用高级评论  新用户注册  返回页首  恢复上次提交      
该文被作者在 2007-07-14 00:25 编辑过


相关链接: