EDB中取得数据库的记录条数

要获取某个数据库中的所有记录数,没有必要一条一条的往外读,然后判断读成功了多少条

 

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;

 

如下的代码就可以实现获取记录的条数:

  1. CEOID    DBoid = 0;
  2. hDb = CeOpenDatabaseInSession( g_hSession, 
  3.         &g_VolGuid, 
  4.         &DBoid, 
  5.         szDbname, 
  6.         NULL, 
  7.         0,
  8.         NULL);
  9. BY_HANDLE_DB_INFORMATION    bhdi = {0};
  10. bhdi.wVersion = 2;
  11. bhdi.guidVol = g_VolGuid;
  12. bhdi.oidDbase = DBoid;
  13. if (!CeGetDBInformationByHandle(hDb, &bhdi))
  14. {
  15.     DWORD    dd = GetLastError();
  16.     return    FALSE;
  17. }

 

上面代码执行后,在bhdi.infDatabase.dwNumRecords中存储的就是记录数

评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值