基于Windows CE.Net嵌入式系统的数据库设计与应用

时间:2022-06-16 12:24:00

基于Windows CE.Net嵌入式系统的数据库设计与应用

摘 要: 针对嵌入式平台下数据库应用日益广泛的实际,建立在嵌入式操作系统背景下的简单、高效、实用的数据库访问方法成为必要。在此主要对在Windows 平台下如何利用ADOCE技术访问SQL Server CE 2.0数据库进行了讨论,其中重点阐述了数据库连接的建立和怎样通过SQL语句对数据库进行各式访问操作,最后给出了运用ADOCE技术访问SQL Server CE 2.0数据库的程序运行实例,结果表明这种方法满足对嵌入式数据库的访问需求。

关键词: Windows ; ADOCE; SQL Server CE 2.0数据库; 嵌入式操作系统

中图分类号: TN919?34; TP311.13 文献标识码: A 文章编号: 1004?373X(2013)20?0071?03

0 引 言

随着当代科技日新月异的发展,作为新兴产物的嵌入式移动信息设备在人类生活领域的应用越来越广泛。这些嵌入式设备中的PDA以其体积小、重量轻、便于携带、功能强大、功耗低等特点而被受青睐。嵌入式设备的数据库管理作为PDA的一个重要功能在各行各业的应用也越来越丰富,已成为人们关注的焦点,如:数据字典、车载卫星导航设备、移动设备上的网上追逃等应用归根结底就是数据库的应用。嵌入式移动数据库系统是支持移动计算或某定计算模式的数据库管理系统,数据库系统与操作系统、具体应用集成在一起,运行在各种智能型嵌入式设备或移动设备上[1]。目前流行的嵌入式数据库有:Raima提供的Raima Data Manager for CE;Sybase提供的Adaptive Server Anywhere for CE;Oracle提供的Oracle lite for CE;Pocket Access以及Microsoft提供的SQL Server CE。本文将主要介绍在Windows 操作系统下通过ADOCE技术访问微软的SQL Server CE 2.0数据库的实现与应用实例。

1 Windows 介绍

Windows CE是Microsoft专门为信息设备、移动应用、消费类电子产品、嵌入式应用等非PC领域而全新设计的战略性嵌入式操作系统产品。Windows CE的设计目标是:模块化以及可伸缩性、实时性能好、通信能力强大、支持多种CPU[2]。

Windows 是Windows CE 3.0的后续产品,它不仅是一个功能强劲的实时嵌入式操作系统,而且提供了众多强大工具,允许用户利用它快速开发出下一代的智能化小体积连接设备。借助于完善的操作系统功能和开发工具,Windows 为开发人员提供了构建、调试和部署基于Windows 的定制设备所需的一切特性。

Windows 操作系统可以支持多种数据库操作,它自身就自带有一种数据库CCeDBDatabase,可以通过MFC为Windows 提供的4个数据库类对其进行操作。

2 SQL Server CE 2.0介绍

SQL Server CE 2.0的全名是SQL Server 2000 Windows CE Edition version 2.0。SQL Server CE 2.0是运行在Pocket PC以及其他Windows CE平台上的一个很简化的SQL Server 2000/7.0,是用作快速开发的关系型精简数据库,它将企业数据管理能力扩展到了基于Windows CE操作系统的嵌入式移动设备上。这个数据库可以和PC机上的SQL Server数据库同步,而且用它操作数据库的效率是比较高的。

3 ADO和ADOCE介绍

ADO 是 Microsoft 为所有数据类型提供的战略性高级接口,它是微软对OLEDB的封装。采用 ADO 的应用程序可以通过 OLE数据库提供程序访问并处理数据库服务器中的数据。ADO 的主要优点是:使用简单、速度高、内存占用少、磁盘占地面积少。

ADO 提供了一致的、高性能的数据访问方式,可以使用应用程序、工具、语言甚至是 Internet 浏览器创建前端数据库客户机程序或中层业务对象。

ADOCE 提供了 ADO for Windows CE 操作系统的一个子集,其中包括 Recordset 和 Field 对象的实施过程。ADOCE 能够启动对存储于本地设备中的数据库的访问功能,并为网络数据库中的数据提供同步功能,从而在 Windows CE 操作系统中增加了新的数据库功能。

ADOCE 可以由 eMbedded Visual C++ 4.0等任一实现了 COM 的环境中访问 Windows CE数据库引擎。

4 访问SQL Server CE 2.0数据库的实现与

应用

应用程序不能直接访问SQL Server CE 2.0数据库文件,它要操作数据库文件还必须具备两大要素:数据库访问方式()和数据库引擎。本文介绍的方法就是应用程序以ADOCE的方式访问SQL Server CE 2.0数据库引擎,通过数据库引擎操作数据库文件。

在一些情况下(如查询操作)将产生ADOCE记录集,供应用程序下一步操作。应用程序访问SQL Server CE 2.0数据库流程如图1所示。

4.1 ADOCE和SQL Server CE 2.0数据库的注册

在Windows 系统下ADOCE和SQL Server CE 2.0数据库都不能直接使用,需要通过REGSVRCE.EXE将它们的DLL文件进行注册。共涉及到的DLL文件有7个,其中ADOCE有3个(adoce31.dll,adoxce31.dll,adoceoledb31.dll),SQL Server CE 2.0数据库有4个(ssce20.dll,msdaeren.dll,ssceca20.dll,ssceerror20en.dll),这些动态连接库文件都需要预先放置在目标机的Windows目录下。下面是应用程序(以eMbedded Visual C++ 4.0为例)对adoce31.dll进行的动态注册:

CreateProcess(_T("\\Windows\\RegSvrCe"),_T("/s\\Windows\\adoce31.dll"),NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL);

其余几个DLL文件的注册与此类似,这里不做介绍。

数据库流程图

4.2 创建SQL Server CE 2.0数据库连接实例

创建数据库连接是访问数据库的第一步。在常用的Windows操作系统下SQL Server数据库的存储格式与基于Windows 平台的存储格式是不同的。在Windows环境下SQL Server数据库的存储格式是mdf,而在Windows 系统下则是以sdf格式存在的。这在创建数据库连接时需要特别注意,下面介绍建立数据库连接的具体步骤。

4.2.1 创建数据库文件

在建立数据库连接之前,需要先创建SQL Server CE 2.0数据库,建立数据库的方法比较常见的有两种,一种是通过程序创建,即采用SQL语句中的create database命令,另一种比较简单的创建数据库方法,就是运用SQL Server CE中的查询分析器来可视化创建数据库,本文采用查询分析器来建立数据库BoardStore.sdf。

4.2.2 创建数据库提供者实例

定义数据库连接:

IADOCEConnection * m_Conn;

给定数据库连接参数:

TCHAR tsADOCE30ConnProgID[]= TEXT("ADOCE.Connection.3.1");

IID IID__Connection =

{0x113033DE,0xF682,0x11D2,{0xBB,0x62,0x00,0xC0,0x4F,0x68,0x0A,0xCC}};

//ADOCE连接对象GUID。

初始化COM组件,建立数据库连接实例:

CoInitializeEx(NULL,COINIT_MULTITHREADED);

hr=CLSIDFromProgID(tsADOCE30ConnProgID,&tClsid);//获取ADOCE的CLSID

hr=CoCreateInstance (tClsid, NULL,

CLSCTX_INPROC_SERVER | CLSCTX_LOCAL_SERVER,

IID__Connection, (LPVOID *)&m_Conn);

将数据库连接与数据库文件相关联:

_tcscpy(pszProvider, _T("Provider = Microsoft.SQLSERVER.OLEDB.CE.2.0;Data Source=\\Storage Card\\BoardStore.sdf"));

hr = m_Conn?>Open(pszProvider,TEXT(""),

TEXT(""),adOpenUnspecified);

其中,Data Source是数据库文件存放的位置,需使用绝对路径。这里Open()函数的2、3参数是设置数据库用户名和密码用的,由于数据库BoardStore.sdf未设置用户名和密码,所以参数为空。

4.2.3 创建数据记录集实例

成功建立数据库连接后,就可以在数据库连接的基础上建立记录集了,创建记录集和创建数据库连接的过程非常相似,仅需要修改一下参数。

创建记录集实例:

hr=CLSIDFromProgID( tsADOCE30RSProgID, &tClsid );

hr = CoCreateInstance (tClsid, NULL,

CLSCTX_INPROC_SERVER | CLSCTX_LOCAL_SERVER,

IID__Recordset,(LPVOID *)&m_Reset);

将记录集与数据库连接相关联:

hr=m_Reset?>put_ActiveConnection(varConn1);

参数varConn1为刚才已经建立的数据库连接,到目前为止访问数据库的准备工作就已经做完了。

4.3 访问SQL Server CE 2.0数据库应用实例

建好数据库连接和记录集,就可以通过执行SQL语句对数据库进行访问操作,数据库操作主要有建立表、删除表、查询记录、删除记录、添加记录、修改记录、排序等。下面对应用最为广泛的查询记录、删除记录和添加记录操作做一个详细的介绍(以某卫星定位系统中的定位数据管理为例)。

4.3.1 查询记录

查询记录是通过SQL语句将待查询的记录首先放进先前建立的记录集中,然后通过Move、get_Fields、get_Value等函数将数据解析出来。代码如下:

str.Format(_T("select * from pos where ID=%d"),m_uesrID);

hr=m_Reset?>Open(_variant_t(str),varConn1,

adOpenStatic,adLockReadOnly,adCmdUn);known

其中,参数adOpenStatic表示静态打开记录集,参数adLockReadOnly表示打开的记录集为只读方式,不能对其修改。如果不设定查询条件,则将POS表中的全部记录查询到记录集中了。需要继续查询,则将前面的查询结果记录集关闭。

4.3.2 删除记录

删除记录的方式有两种:一种是将要删除的记录以动态记录集方式查询出来,然后在记录集中删除它们,同时将数据库文件中对应的数据也一并删除了;另一种就是通过数据库连接执行SQL命令DELETE将记录直接从数据库文件删除。本定位系统采用了第二种方法,代码如下:

provider.Format(_T("DELETE FROM Pos WHERE Time like ′%s′And Id=%s"),m_strtime,m_strid);

hr=m_Conn?>Execute(_bstr_t(provider),

NULL,?1,NULL);

如果不设定删除条件,则将POS表中的所有数据全部删除。

4.3.3 添加记录

添加记录与删除记录比较类似,也有两种方法。这里不在详细阐述。

很多时候,数据库都会有一个容量,不能无限制的添加记录,目前比较流行的数据库容量管理方法是采用先进先出的原则将最旧的记录删除,然后添加新数据。如:

varTSQL.bstrVal=SysAllocString(TEXT("pos");

hr=m_Reset?>Open(varTSQL,varConn1,adOpenDynamic,

adLockOptimistic,adCmdTableDiect);

hr=m_Reset?>MoveFirst();

hr=m_Reset?>Delete();

其中Open()函数的最后三个参数必须设置为adOpenDynamic、adLockOptimistic和adCmdTableDiect,这是因为只有动态打开的记录集才能执行删除添加记录操作。

4.3.4 程序运行实例

图2给出了运用ADOCE技术访问SQL Server CE 2.0数据库的应用实例。

4.4 释放SQL Server CE 2.0数据库连接

在程序退出时,往往需要释放数据库连接和记录集,防止产生内存泄露。

m_Conn?>Release();

m_Reset?>Release();

5 结 语

基于Windows 平台的数据库应用程序开发已成为开发PDA应用程序的重要部分。专家诊断系统、信息查询系统、嵌入式GIS系统、手持听音训练系统等都涉及到数据库的操作。本文研究的基于Windows 系统下通过ADOCE方式访问SQL Server CE 2.0数据库的方法,简单、高效、实用,现已成功应用于某嵌入式定位系统中的卫星定位数据和通信信息数据的管理中,具有很高的实用价值。

参考文献

[1] 赵勇,董德存.Windows CE下建立数据库的几种方法[J].计算机应用与软件,2005,22(3):48?50.

[2] 陈向群,王雷,马洪兵.Windows 系统分析及实验教程[M].北京:机械工业出版社,2003.

[3] 倪英俊,王命延.嵌入式SQL语句在VC++数据库系统开发中的技巧[J].科技广场,2006(11):30?31.

[4] Microsoft. SQL Server 2000 Windows CE edition 2.0 [M/CD]. [2002?02?20]. http://www. /en.

[5] Anon. Exploring SQL CE 2.0 schema information with the ATL OLE DB consumer templates [EB/OL]. [2005?04?24]. http://.

[6] 熊宇昆,邱智亮.Windows 内核定制[J].电子科技,2006(2):60?62.

上一篇:Visual C++与Matlab混合编程方法的对比分析研... 下一篇:基于Android与Mobile GIS的新生报到服务系统