分类: 数据库开发技术
2008-12-09 13:12:58
支持4种排序索引,新版本支持外部介质得存储。不支持锁定,但是可以通过提供消息来通知其他进程已经修改了数据库。
支持9种字段的数据类型 iVal, uiVal, lVal, ulVal, filetime, lpwstr, blob, BoolVal,dblVal 1。装配数据库卷 数据库卷是可以存储WINCE数据库的特殊格式的文件。 BOOL CeMountDBVol( PCEGUID pceguid, LPWSTR lpszDBVol, DWORD dwFlags ); 数据库卷可以在同一时间被多个进程打开,系统会维护卷的引用计数。在最后一个进程卸下数据库卷之后,系统才卸下这个卷。 2。卸载数据库卷 BOOL CeUnmountDBVol( PCEGUID pceguid ); 3。列举已装配的数据库卷 BOOL CeEnumDBVolumes( PCEGUID pceguid, LPWSTR lpBuf, DWORD dwNumChars ); 4。创建数据库 (1)CeCreateDatabase 老API,只能创建存放在对象存储库中的数据库。 CEOID CeCreateDatabase( LPWSTR lpszName, DWORD dwDbaseType, WORD wNumSortOrder, SORTORDERSPEC* rgSortSpecs ); (2)CeCreateDatabaseEx CEOID CeCreateDatabaseEx( PCEGUID pceguid, CEDBASEINFO* lpCEDBInfo ); 5。打开数据库 (1)CeOpenDatabase HANDLE CeOpenDatabase( PCEOID poid, LPWSTR lpszName, CEPROPID propid, DWORD dwFlags, HWND hwndNotify ); 参数lpszName为指定的数据库的名称,如果poid不为0的话将被忽略。dwFlags的取值可以是0或者CEDB_AUTOINCREMENT,如果是后者的话,那么每次从数据库中读取一个记录,都将导致数据库当前指针按照排序次序移动到下一条记录。 hwndNotify表示当另一个进程或线程更改了数据库时要通知的窗口句柄,这种基于消息的通知,允许用户在打开数据库的情况下监视它的变化。 (2)CeOpenDatabaseEx HANDLE CeOpenDatabaseEx( PCEGUID pceguid, PCEOID poid, LPWSTR lpszName, CEPROPID propid, DWORD dwFlags, CENOTIFYREQUEST *pRequest ); pRequest为指向CENOTIFYREQUEST结构的指针,该结构用于当其他进程或线程更改了数据库时发送通知消息到一个指定的窗口。 typedef struct _CENOTIFYREQUEST{ DWORD dwSize; HWND hWnd; DWORD dwFlags; HANDLE hHeap; DWORD dwParam; } CENOTIFYREQUEST; 在使用完该结构后,只需要调用CeFreeNotification函数来释放它即可。 BOOL CeFreeNotification( PCENOTIFYREQUEST pRequest, PCENOTIFICATION pNotify ); 6。删除数据库 CeDeleteDatabase和CeDeleteDatabaseEx 若要删除对象库中的数据库,可以用: BOOL CeDeleteDatabase( CEOID oidDbase ); 要删除数据库卷中的数据库 BOOL CeDeleteDatabaseEx( PCEGUID pguid, CEOID oid ); 7。列举数据库 WINCE有两套API来列举数据库,一组用来列举对象存储库中的数据库,一组用来列举数据库卷中的数据库。每一组API函数都由两个函数组成, CeFindFirstDatabase用于查找第一个数据库并获取一个查找句柄,然后传递给CeFindNextDatabase函数继续查找数据库。 CeFindFirstDatabase函数只是进行搜索,并不返回数据库对象。 第一组查找API函数 HANDLE CeFindFirstDatabase( DWORD dwDbaseType ); CEOID CeFindNextDatabase( HANDLE hEnum ); 第二组查找API函数 HANDLE CeFindFirstDatabaseEx( PCEGUID pceguid, DWORD dwDbaseType ); CEOID CeFindNextDatabaseEx( HANDLE hEnum, PCEGUID pceguid ); 若pceguid被设置为NULL,那么将查找系统中所有被装载的数据库卷,若dwDbaseType被设置为0,那么将数据库卷或对象存储库中的所有数据库。 8。查找或移动记录 CeSeekDatabase函数查找数据库或移动数据库指针,该函数在查找记录的同时,还设置了数据库的当前指针。若查找到了相应的记录,则返回此记录对象标识,否则返回0值。 CEOID CeSeekDatabase( HANDLE hDatabase, DWORD dwSeekType, DWORD dwValue, LPDWORD lpdwIndex ); 9。写记录 CEOID CeWriteRecordProps( HANDLE hDbase, CEOID oidRecord, WORD cPropID, CEPROPVAL * rgPropVal ); 10。读取记录 CEOID CeReadRecordProps( HANDLE hDbase, DWORD dwFlags, LPWORD lpcPropID, CEPROPID * rgPropID, LPBYTE *lplpBuffer, LPDWORD lpcbBuffer ); 11。删除记录 BOOL CeDeleteRecord( HANDLE hDatabase, CEOID oidRecord ); 上边的是各种函数,真正涉及到监听的心得又是体会如下:
前几天对一个贴子进行讨论,在调试时有很多值得注意的地方,现在列举出来. /////打开联系人数据库,并注册事件 if(hdDB == INVALID_HANDLE_VALUE){ |