读取记录集是否为空

kakaxihua 2015-07-13 11:22:13
1、数据库中有一个表“表1”,现在数据库中没有任何内容,字段就是ID。
2、数据库中有一个表“表2”,现在数据库中有一行内容,记录集就是ID=1。


问题:

try
{
m_pRecordSet.CreateInstance(__uuidof(Recordset));
strSQLFind.Format("Select MAX(ID) As maxCurCode From 表1 ");
m_pRecordSet->Open((_variant_t)strSQLFind, theApp.m_pConnection.GetInterfacePtr(),adOpenDynamic,adLockOptimistic,adCmdText);
//A// if(((m_pRecordSet->adoEOF) && !(m_pRecordSet->BOF)))
//B// if (!m_pRecordSet->BOF )
//C// if(!((m_pRecordSet->adoEOF) && (m_pRecordSet->BOF)))
//D//
if(m_pRecordSet->RecordCount>0)
{
//如果存在
m_pRecordSet->MoveFirst();
}
else
{
AfxMessageBox("没有登陆日志信息,需要添加!");
}
}
catch(_com_error *e)
{
AfxMessageBox(e->ErrorMessage());
}
if (m_pRecordSet)
{
m_pRecordSet.Release();
}



用了 以上ABCD四种方法测试,不光是表1还是表 2都是BOF EOF=0,D=-1
请大侠们诊断下。
...全文
96 2 打赏 收藏 转发到动态 举报
写回复
用AI写文章
2 条回复
切换为时间正序
请发表友善的回复…
发表回复
Tiger_Zhao 2015-07-13
  • 打赏
  • 举报
回复
统计函数MAX(ID)总会有结果的(表1返回NULL、表2返回),整个SELECT返回一条记录。
因为有记录,所以BOF和EOF都是FLASE。
而且你明显用了服务端游标,刚打开的记录集没有访问数据,这时的RecordCount初始值就是-1,是为了和访问了数据但是没记录的0进行区分。
等你调用过各种Move方法后RecordCount就会是已取到的记录数。
如果用客户端游标,打开记录集后会自动取全部记录,那样的RecordCount才是正真的结果记录数。

判断是否有记录的原则:
服务端游标:用BOF和EOF;
客户端游标:用RecordCount。
道玄希言 2015-07-13
  • 打赏
  • 举报
回复
你將 sql 语句写成 Select MAX(ID) As maxCurCode, count(id) as countcode From 表1 判断表是否为空: 直接看 countcode 是否大于0了.

34,590

社区成员

发帖
与我相关
我的任务
社区描述
MS-SQL Server相关内容讨论专区
社区管理员
  • 基础类社区
  • 二月十六
  • 卖水果的net
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧