要获取某个数据库中的所有记录数,没有必要一条一条的往外读,然后判断读成功了多少条
edb中提供CeGetDBInformationByHandle这个函数,它可以取得数据库中的许多相应信息
这个函数需要两个参数,第一个是数据库的句柄,就是通过CeOpenDatabaseInSession打开数据库时所返回的句柄,第二个参数是
BY_HANDLE_DB_INFORMATION类型的结构,它定义为:
typedef struct BY_HANDLE_DB_INFORMATION {
WORD wVersion;
WORD
wReserved
;
CEGUID guidVol;
CEOID oidDbase;
CEDBASEINFOEX infDatabase;
}BY_HANDLE_DB_INFORMATION;
在使用它之前,先将它的几个数据初始化一下,wVersion是用来标识结构体的版本,在EDB中需要指定为2,在CEDB中要指定为1。guidVol是数据库卷的唯一标识,oidDbase是数据库的标识,将这几个数据初始化后,就可以使用这个函数来获取了。
这个BY_HANDLE_DB_INFORMATION结构中的infDatabase包含了数据库的各种信息,它是CEDBASEINFOEX 类型的,它的定义如下:
typedef struct CEDBASEINFOEX {
WORD wVersion;
WORD wNumSortOrder;
DWORD dwFlags;
WCHAR szDbaseName[CEDB_MAXDBASENAMELEN];
DWORD dwDbaseType;
DWORD dwNumRecords;
DWORD dwSize;
FILETIME ftLastModified;
CESORTORDERSPEC rgSortSpecs[CEDB_MAXSORTORDER];
} CEDBASEINFOEX;
如下的代码就可以实现获取记录的条数:
- CEOID DBoid = 0;
- hDb = CeOpenDatabaseInSession( g_hSession,
- &g_VolGuid,
- &DBoid,
- szDbname,
- NULL,
- 0,
- NULL);
- BY_HANDLE_DB_INFORMATION bhdi = {0};
- bhdi.wVersion = 2;
- bhdi.guidVol = g_VolGuid;
- bhdi.oidDbase = DBoid;
- if (!CeGetDBInformationByHandle(hDb, &bhdi))
- {
- DWORD dd = GetLastError();
- return FALSE;
- }
上面代码执行后,在bhdi.infDatabase.dwNumRecords中存储的就是记录数