Windows Mobile下Native C++访问SqlCe的封装

背景

进行Windows Mobile的应用的开发,很多时候需要对数据库进行访问,存储和读取。可是微软没有为Native C++提供象ADO.NET下的封装,所以我自己封装了一个SqlCe访问类。

简述

本文讲述在Windows Mobile和Wince下,Native C++访问SqlCe的封装类的实现。由于微软没有为C++提供像ADO.NET的封装,为Native C++访问SqlCe制造了一定的难度,因此对OleDB访问SqlCe进行封装,方便使用SQL语句对SqlCe进行操作。

SqlCe访问技术概述ADO.NET

.NET Compact Framework逐渐成为Windows Mobile和Wince的开发的主流,微软为CF.NET提供了ADO.NET访问SqlCe,对SqlCe的访问封装在System.Data.SqlServerCe下,和其他数据库(SQL Server, Oracle)访问基本兼容,但是不支持DbProviderFactory。例如下面的代码不能通过编译,因为没有SqlCeProviderFactory类。

DbProviderFactory factory = SqlCeProviderFactory.Instance;

我之前封装了一个ADO.NET的SqlCe访问类,可以参考 .NET Compact Framework下SQL CE的使用(http://www.cnblogs.com/procoder/archive/2009/04/08/1431361.html)和 实现了SqlCeHepler的单元测试类见.NET Compact Framework下的单元测试(http://www.cnblogs.com/procoder/archive/2009/04/08/1431724.html)。

OleDb

在Native的世界,可以通过OleDb来访问SqlCe。OleDb封装在sqlceoledb35.dll下,使用OleDb需要安装一个Cab包如下:

C:\Program Files\Microsoft SQL Server Compact Edition\v3.5\Devices\wce500\armv4i\sqlce.repl.ppc.wce5.armv4i.CAB

上述路径根据平台有所不同。

注意上述sqlceoledb35.dll只是支持SqlCe 3.5,微软对不同版本的SqlCe的兼容性不是很好,可以参考 SQL Server Express和SQL Server Compact的应用(http://www.cnblogs.com/procoder/archive/2009/02/23/1396231.html)和 .NET Campact Framework下SQL CE兼容性问题(http://www.cnblogs.com/procoder/archive/2009/04/15/1436275.html)了解SqlCe的历史我兼容性问题。

本文后续会重点讲述OleDb。

ADO

在Windows Mobile和Wince平台,微软官方不支持ADO。但是有一个社区实现,可以参考 A set of ADOCE classes(http://www.codeproject.com/KB/mobile/ado_ce_ca.aspx)。我没有试过,所以不好评论。

实现

下面讲述如何基于OleDb实现对SqlCe的访问。

文档和Samples

微软提供了在线文档,可以在 Microsoft SQL Server Compact 3.5 Books Online and Samples(http://www.microsoft.com/downloads/details.aspx?FamilyID=1ff0529a-eb1f-4044-b4b7-40b00710f7b7&displaylang=en)下载。上述链接只是包含在线文档,没有提供例子程序的,所以这个名字有点骗人感情之嫌。虽然提供了在线文档,但是文档的质量不高,有些细节没讲,例如调用ICommand::Execute的入口参数就没有讲,我做的时候只能自己试。

虽然上面的链接不提供Samples,但是我们还有另外一个方法取得Samples。在

C:\Program Files\Microsoft SQL Server 2005 Mobile Edition\Samples\NorthwindOleDb

下可以得到Sample代码,前提是安装了Microsoft SQL Server 2005 Mobile Edition。但是要注意不同SqlCe版本实现有所不同,这个代码要结合上面的Online book修改才行。

时间: 2024-12-20 23:56:06

Windows Mobile下Native C++访问SqlCe的封装的相关文章

Wince和Windows Mobile下native C++的单元测试

单元测试(Unit Test)已经成为开发过程中不可分割的一部分,也是refactoring的基础,在Wince和Windows Mobile开发native C++时可以使用CppUnitLite进行单元测试. 在其他平台开发C++的时候,我一直使用CppUnit进行单元测试,可是CppUnit不支持Wince平台,因此在Wince下选择CppUnitLite进行单元测试.CppUnitLite是CppUnit的作者Michael Feathers重新开发的针对C++的单元测试框架.其开发目的

Windows Mobile下快速截屏的一种方法

    WinCE下截屏的方法有很多种,这里介绍一种利用GAPI实现的方法.GAPI是Game API的缩写,它提供了一系列函数,可以直接对屏幕缓冲区进行读/写访问.虽然现在逐渐被DirectX Mobile取代,但自从2000年首次应用在PPC上后,几乎所有的移动设备上都能看见它.GAPI主要应用于游戏开发,但也不仅限于此.下面就介绍一种在WM下如何利用GAPI快速截取屏幕的方法.  1      struct { 2           BITMAPINFOHEADER bmih; 3   

在Windows Mobile下使用MSXML

首先是头文件: #include <msxml.h> 初始化 COM 环境: hr = CoInitializeEx(NULL, 0); 创建一个 XML DOM 对象: IXMLDOMDocument *pDOM = NULL; hr = CoCreateInstance(CLSID_DOMDocument, NULL, CLSCTX_INPROC_SERVER | CLSCTX_LOCAL_SERVER, IID_IXMLDOMDocument, (LPVOID*)&pDOM);

Windows Mobile下使用HTML控件

  在某些特殊的应用场合,我们很想要一个类似IE功能的模块,定制自己的功能. HTML控件现在向我们张开了怀抱.稍稍奇怪的是,它并不完全支持WAP协议.看来,IE还是做了自己的解析. 首先,我们要注册一下控件.把Htmlctrl.h包含进来,调用InitHTMLControl()函数,里面的参数为应用程序句柄.以下代码在MFC中使用: VERIFY(InitHTMLControl(AfxGetInstanceHandle())); DWORD dwStyle = WS_CHILD | WS_VI

Windows mobile下,pocket PC 和 PC上BS系统的文件传输!

问题描述 我们现在有一个系统是BS架构的,现在想把上面的数据转成文件并传输到PocketPC上,不知道用什么方法可以做,还有就是反过来,把PocketPc上的文件反传到PC上,让BS系统去读,这怎么做啊,请各位帮忙,谢谢! 解决方案 解决方案二:该回复于2007-12-04 11:17:31被版主删除

艾伟_转载:Windows Mobile开发,Native C++ PK .NET Compact Framework

缘由 经常听到一些刚刚接触Windows Embedded CE和Windows Mobile开发的人会提出一些疑问.进行Windows Mobile开发,到底使用什么语言呢?C++还是C#?Java行不行?下面就我自己的想法讲述一下Native C++ 和 .NET Compact Framework的异同和选择.   什么是Native Native翻译成原生,Native是使用C,C++或者汇编等语言代码编写的,编译成处理器相关的binary文件(执行文件,DLL等可执行文件), 关于可执

Windows mobile多国语言实现

介绍一种多国语言的实现办法,这也是微软推荐的方式,打开windows mobile下的windows目录可以看到有很多以MUI为后缀名的文件,例如shellres.dll.0804.mui. shell.dll.0804.mui......我们可以用eXeScope.exe或者resources hacker这样的文件查看器查看一下这些文件究竟是怎么一回事,不难发现文件里面都是一些资源ID和相对应的字符串.也许你就疑惑这是为什么呢?这些文件有什么作用呢?下面分解. MUI是Multilingua

Windows Mobile 消息钩子(1)

    在Windows中,设置键盘钩子很多人都做过,但是在windows Mobile系统中并没有直接的函数支持.但是我们可以通过使用undocument api来实现. 一.定义参数 #define WH_KEYBOARD_LL           20  #define HC_ACTION        0  typedef LRESULT(CALLBACK* HOOKPROC)(int code, WPARAM wParam, LPARAM lParam);  typedef HHOOK

Windows和Linux下使用Python访问SqlServer的方法介绍_python

经常用Python写demo来验证方案的可行性,最近遇到了Python访问SqlServer的问题,这里总结下. 一.Windows下配置Python访问Sqlserver 环境:Windows 7 + Sqlserver 2008 1.下载并安装pyodbc 下载地址:http://code.google.com/p/pyodbc/downloads/list 2.访问SqlServer 复制代码 代码如下: >>> import pyodbc >>>cnxn = p