一个关于m_pRecordset->adoEOF的有关问题

一个关于m_pRecordset->adoEOF的问题
各位大哥大姐,小弟很菜,有个问题请教大家,还忘大家多多指教啊!
我的问题是这样的:我想获得数据表中记录的最大Id号
我的代码是这样的:
int   Patient::GetMaxId()
{
int   iMaxId   =   1;
try
{
//连接数据库
_RecordsetPtr   m_pRecordset;
ADOConn   m_AdoConn;
//设置INSERT语句,   将数值转换为字符串
_bstr_t   bSql;
bSql   =   "Select   Max(Id)   AS   MaxId   From   Patient ";
//   执行SELETE语句
m_pRecordset   =   m_AdoConn.GetRecordSet(bSql);
//   如果结果集为空则记录个数为0,否则为100
if(!m_pRecordset-> adoEOF)
iMaxId   =atoi((char*)_bstr_t(m_pRecordset-> GetCollect( "MaxId ")));
m_AdoConn.ExitConnect();//断开与数据库的连接
return   iMaxId;
}
//   捕捉异常
catch(_com_error   e)
{
//   显示错误信息
AfxMessageBox(e.Description());
}
return   iMaxId;

}
当我数据表中没有任何记录的时,程序执行到if(!m_pRecordset-> adoEOF)语句时应该是不执行的,但是这里却执行了,然后程序直接跳到catch语句捕捉错误了.当数据表中有记录时程序是对了,为什么呢?拜托大家了!很急!


------解决方案--------------------
问题在这里面m_AdoConn.GetRecordSet
所以贴出代码来才知道,基本上可以肯定是游标的问题。
------解决方案--------------------
我认为问题在这里:

Select Max(Id) AS MaxId From Patient

当你表里没任何数据的时候,这个sql也是有结果的,就是说表为空的时候,
m_pRecordset里面也是有内容的,内容是啥呢?是NULL!

而你取结果又直接
atoi((char*)_bstr_t(m_pRecordset-> GetCollect( "MaxId ")));
了,自然要出现异常了:)

PS:应该用
com_error &e
而不是com_error e的:)