Posted on 2007-03-17 22:12
黎波 阅读(7951)
评论(57) 编辑 收藏 所属分类:
SQL Server Compact 、
My Lectures
去年曾经在公司讲过“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
Good
我来支持你了
虽然还没有开始搞SQL Mobile 但是先了解一下
第二个压缩包,是第一节。
第一个压缩包,是第二节。
看看。
实例代码我运行后,总是Error - Initialize database报这个错误,运行Northwindoledb这个程序需要进行什么设置吗
而且在windowsmobile5。0模拟器上运行找不到oledb.h,oledberr.h,ssceoledb30.h
在ppc2003模拟器上运行就没问题,这是为什么??
@yang
我这里提供的示例代码没有Northwindoledb这个示例,而且都是用
C#编写的,不需要引用oledb.h,oledberr.h,ssceoledb30.h等C++的头文件。
请问你的开发工具是什么?Northwindoledb是哪里得到的?
我的是sqlservermobilesdk里自带的代码实例,它是用c写的
C:\Program Files\Microsoft SQL Server 2005 Mobile Edition\Samples
我是用vs2005开发。
@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页中有说到。
而且在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这三个文件我也加进去了
我再试试。
这个文件夹下有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
他们代表了什么意思?
@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后就可以顺利运行了。
@yang
sqlce30.dev.*.cab 是设备上的查询分析器,sqlce30.repl.*.cab 是合并复制的运行库,sqlce30.*.cab 是SQL Mobile核心运行库。
phone.wce5 表示 WM5 Smartphone,ppc.wce5 表示 WM5 Pocket PC,剩下的 wce5 表示 WinCE5。
上述文件安装完之后,在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后,还是上诉错误,但警告没有了。
但是在ppc2003模拟器上运行程序成功,没有做如上修改的前提下(注释掉'oledb.h',oledberr.h,ssceoledb30.h)。这是为什么?
那奇怪了为什么我在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
我用的是wm5。0英文的模拟器。
那我重新装vs2005?
还是我的sdk里少了这个'oledb.h'头文件?
奇怪的是ppc2003上运行好使?
这回郁闷了
我重新装过了vs2005(英文版)还是不好使,在wm5。0的模拟器(英文版)上就是报错,在ppc2003模拟器上运行就没问题。
请问vs2005需要什么设置吗,在运行这些程序时。
@yang
安装完VS2005,再安装WM5SDK,应该就行了。
如果还有问题,我们通过邮件讨论吧。
china.libo AT gmail.com
请问你下,为什么在我的计算机上安装Device Emulator 2.0中文版后,但是一直找不到中文的模拟器。这是为什么呢?
我碰到的情况跟yang一样,请问,现在你解决这个问题了吗?
SQL Server CE2.0 RDA 的问题请教:我用RDA下载了数据后,为什么不能修改呢?使用索引跟踪模式下载,此时所有表都可以访问,如果对记录进行修改后,这个表将不能访问,除非将数据回推到SQLServer。访问方式使用OLDB的ATL模板。非常急,谢谢!0374-3212849 zhongshand@xigc.com
@小豆
我用RDA下载了数据后,为什么不能修改呢?
->如何修改呢?
使用索引跟踪模式下载,此时所有表都可以访问,如果对记录进行修改后,这个表将不能访问,除非将数据回推到SQLServer。
->进行了什么修改?不能访问是指?
总体上你的问题我不清楚是什么回事
你好,我是初学者,在连接数据库的时候,总是连不上,提示:找不到请求的.net framework数据提供程序。可能没有安装。
可是,我机器里明明装了sql server mobile了,怎么说没有安装呢?想请教一下高手。
@fairyll
可能你安装SQL Server Mobile失败了,System.Data.SqlServerCe.dll没有成功注册到GAC。有一个解决的办法是将System.Data.SqlServerCe.dll部署到应用程序的目录下,让你的应用程序可以找到。
用你提供的demo运行成功了。让我学习PDA更明了,感谢黎波!
我的环境是:win2003 sp1+sql 2000 sp3,Serve ce2.0+sp3,Mobile 5.0 PPC SDK,VS2005
每课大概是多少时间呢?
曾经给东软讲了一个类似的一天的课程,似乎时间上有一点赶。
@Justin Shen
每节课大约30~40分钟
有点帮助,但幻灯片不太详细,如何操作VS不清楚,因为我是新手,所以有了更多的疑问.有更详细的视频吗?
问题如下:如果一个表(tableA)包含主键id,多个人用
rda.Pull("tableA", "select id,name from tableA where 1<>1", oleDBconnectString, RdaTrackOption.TrackingOn, "A_error");
然后各自往表里添加了数据,那么再用
rda.Push("tableA", oleDBconnectString, RdaBatchOption.BatchingOn);
提交数据,会不会产生主键冲突?也就是说能不能提交成功?
因为多人的话,每个人添加的数据就会有相同的主键。
@Marx.Bowen
冲突的可能性非常大!
你要想办法产生一个唯一的ID。可以给每一台设备设置一个较短的机器编码,或者用登录用户的编码,来结合自增长的ID;或者用Guid,或者用时间的Tick值。推荐用Guid或时间Tick+机器编码
参考下面的实现:
http://www.cnblogs.com/upto/archive/2005/11/23/282283.html
请问黎波:我在远程同步数据时,爆出“标识列必须为整数或大整数类型,且不能为空”难道数据表中的字段就不能有“标识"属性吗?
@ligangok
如果加了 RdaTrackOption.TrackingOn 或 RdaTrackOption.TrackingOnWithIndexes 参数,就不可以用标识列。因为标识列是自增长的,没法控制主键的唯一性。
我想实现SQL Server Mobile 和SQL Server 2005 之间的数据同步功能,但用SQL Server Management studio express 打开SQL Server 2005 时,发现"复制"菜单下只有"本地订阅"功能,但却没有"发布"功能,怎么才能打开"发布"功能呀??(我使用的是Microsoft SQL Server Enterprise Edition,可以实现RDA.)谢谢~
@blackbluez
SQL Server Management studio express 是针对 sql server express edition (sse)的,而sse是不具备发布功能,只支持订阅功能,所以你只能看到本地订阅。既然你已经安装了sql server 2005 enterprise,为何不用自带的SQL Server Management studio打开sql server 2005 enterprise呢?
有一问题想请教:我在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呢??晕,在网上也看到有些人遇到同类问题,使用他们说的解决方法,都不行,搞了几天,困惑呀~
请问一下楼主,例子都是C#的代码, 如果用C++的话能不能连接数据库呢?
不会C#, 只是问一下C++能否实现这样的功能,MSDN中只是给出了几个函数说明,没有使用的例子,
@xiaoblack
这个问题可能跟ROM有关,最好把SQL Mobile 2005定制到ROM上去。
@zcc
SQL Server Mobile 2005的程序目录下有带了一个通过oledb方式访问Northwind.sdf数据库的例子,应该比较全面,你可以参考一下。听说C++通过oledb访问sqlce数据库操作比较繁琐,我没有做过。
请教一下楼主,服务器端要怎么设置?我的服务器是2003,sql server 2005,装了iis.要把数据库放在哪里?谢谢!
我碰到和yang以前提到的一样的问题,
在wm5.0平台上
Cannot open include file: 'oledb.h': No such file or directory
请询问是如何解决的?
十分感激
@charles.chen
IIS要能访问到数据库服务器。
我出现的问题和#47楼是一样的.而且我在模拟器上都会出现这种错误不知道怎么办了.你指教.
向你请教一个问题:
在Sql mobile 中的一个动态表格中(表格在不断的扩大),我每隔一段时间去前10位.在sql server 中.我可以用: select top 10 * from tablename order by id desc ,可是我在sql mobile 发现"top"不能用,你能不能告诉我要实现这个功能要如何解决啊?
你好,我想问一下,如何用c#做出比较精致的设备应用程序界面,我现在只会简单的更改程序的背景色,文字等,可是想把自己制作的图片作为应用程序背景应该怎么做,还有,我是刚开始做pda的,都是这看一点那看一点,能不能给我指个主线,谢谢了先·