Windows CE 基础数据库编程
1.1EDB
数据库EDB是Windows CE 自带的,在Windows CE 5.0基础上增加了支持事务处理功能,使用计划定义数据库,增加了字段排序,“流”字段类型,多用户访问。
2常用的数据库API说明
2.1装配数据卷
什么是数据卷?在Windows CE2.1开始,数据库存放在卷中,而不是直接存放在对象存储库中。在windows CE 中如果想要把数据存放在文件中,要使用数据卷,就需要先装配好数据卷;然后关闭数据库,则是要卸载数据卷。
装配数据卷的目的只有两个:新建数据卷;打开已经存在的数据库
在Windows CE中装配数据卷通过函数
/*
该函数执行成功则是返回true,同时还有pGuid所设置的数值,此数值可以传递
给其他数据库的函数使用;如何失败,则是会调用GetLastError的信息(详细见window+CE嵌入式编程手册)
*/
Bool CeMoutDBVolEx{
PCEGUID pGuid,//标识数据库文件的GUID
LPWSTR lpwszDBVol,//表示装配数据库卷的文件名称
CEVOLUMEOPTIONS* pOptions,//设置数据卷的行为和性能,设置为NULL,
//则是加载默认的
DWORD dwFlags,//数据卷被加载的方式
};
加载的方式有:
2.2卸载数据卷
数据卷用完后,应该使用来卸载数据卷
/*
*/
Bool CeUnmountDBVol{
PCEGUID pGUid;//此pGuid 对应装配数据卷中的pGuid
};
2.3新建数据库
/*
EDB使用来新建数据库
*/
CEOID CeCreateDataWithProps{
PCEGUID pGuid,//已经装配的数据卷
CEDBASEINFOEX* pInfo,//指向CEDBASEINFOEX结构体的指针,用来标识数
// 据库名称,类型,排序的方式等
DWORD cProps,//prgProps中数据个数
CEPROPSPE* prgProps,
};
2.3.1
CEDBASEINFOEX结构体的定义
typedef struct
CEDBASEINFOEX{
WORD wVersion;//表示其结构图版本,设置为2
WORD wNumSortOrder;//数据库中能被激活的排序字段个数,最大为16
WORD dwFlags;//数据库状态的标识
WCHAR szDbaseName[CEDB_MAXDBASENAMELEN];//数据库的名称
DWORD dwDbaseType;//数据库类型标识
DWORD dwNumRecords;//数据库中的记录数
DWORD dwSize;//EDB中未使用
FILETIME ftLastModified;//EDB中未使用
CESORTORDERSPEC rgSortSpecs[CEDB_MAXSORTORDER];//
}CEDBASEINFOEX;//
2.4创建会话对象
原因是,数据库的使用都是在会话连接,在EDB中使用CECreateSession
HANDLE CeCreateSession(
CEGUID* pGuid//表示数据库中的GUID,在数据卷装配是得到的数值
);
2.5打开数据库
HANDLE CeCreateDatabaseInSession(
HANDLE hSession,//会话句柄,由
CeCreateSession得到
PCEGUID pGuid,//数据库的GUID,根据
lpwszName和
pGuid来打开数据库
PCEGUID poid,//打开数据库的标识
LPWSTR lpwszName,//打开数据库的名称
SORTORDERSPECEX* pSort,//当前数据库的排序方式
DWORD dwFlags,//
CENOTIFYREQUEST* pRequest,//
);
2.6事务操作
CeBeginTransaction()创建一个事务的操作; CeBeginTransaction()结
束一个事务的操作。事务操作使得数据库的操作是一致的
2.6.1事务的开始
Bool CeBeginTransaction(
HANDLE hSession,//回话的句柄,在
CeCreateDatabaseInSession中获取
CEISOLATIONLEVEL isoLevel,//表示事务的隔离等级
);
2.6.1事务的结束
BOOL CeEndTransaction(
HANDLE hSession,//回话的句柄,在
CeCreateDatabaseInSession中获取
BOOL fCommit,//表示结束事务的方式,第一种方式是保存之前的事务操作;
//第二种方式是混回事务,把之前的操作取消掉
);
2.7删除数据库
BOOL CeDeleteDatabase(
PCEGUID pGUID,//表示要删除数据卷的标识
CEOID oid,
//表示要删除的数据库对象的标识
);
2.8枚举数据库卷以及数据库
BOOL CeEnumDBVolumes(
PCEGUID pGuid,//用来标识数据库卷,首次使用需要
//用
CREATE_INVALIDEDBGUID标识无效
LPWSTR pwszName,//数据库卷的名称
DWORD cchMaxName,//
存储数据卷的长度
);
2.9查找和移动数据库的记录