一个关于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的:)
各位大哥大姐,小弟很菜,有个问题请教大家,还忘大家多多指教啊!
我的问题是这样的:我想获得数据表中记录的最大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的:)