ADO读取数据库表名报错

ADO读取数据库表名出错
c++里面利用ADO读取SQL SERVER 数据库表名出错,上网查了很久,基本上就那几条语句。
我定义了一个类CADO,成员函数和变量如下(只贴跟问题相关的部分):
变量:
ConnectionPtr m_pConnection;
_RecordsetPtr m_pRecordScheme;
函数:
void CADO::Connect(CString sqlsource)//连接到数据库
{
try{
::CoInitialize(NULL); //初始化COM环境,MFC中可以使用AfxOleInit();
m_pConnection.CreateInstance(_uuidof(Connection)); //创建连接对象
_bstr_t bstr_t (sqlsource);
//连接服务器和数据库
HRESULT hr=m_pConnection->Open(bstr_t, "", "", adModeUnknown);

    if(hr!=S_OK)
        AfxMessageBox("无法连接数据库!");
    else
        AfxMessageBox("已连接到数据库!");
}
catch(_com_error e){
    CString errorMsg;
    errorMsg.Format("数据库连接错误!错误信息 %s", e.ErrorMessage());
    AfxMessageBox(errorMsg);///显示错误信息   
}
}

_RecordsetPtr& CADO::GetSchemeSet(CString sqlsource)
{
m_pRecordScheme = NULL;
CADO link;

try{
    if(m_pConnection==NULL)
        Connect(sqlsource);
    m_pRecordScheme.CreateInstance(__uuidof(Recordset));
    m_pRecordScheme = m_pConnection->OpenSchema(adSchemaTables);

    while (! m_pRecordScheme->adoEOF)//1. 死循环
    {
        _bstr_t table_Name = m_pRecordScheme->Fields->GetItem("TABLE_NAME")->Value;//第2处
        _bstr_t table_Type = m_pRecordScheme->Fields->GetItem("TABLE_TYPE")->Value;//第3处

        if ( strcmp(((LPCSTR)table_Type),"TABLE")==0){
            CString tt;
            tt.Format("%s",(LPCSTR)table_Name);     
            AfxMessageBox(tt);        
        }
    }
}
catch(_com_error e){
    AfxMessageBox(e.Description());
    m_pRecordScheme=NULL;
    return m_pRecordScheme;
    }

return m_pRecordScheme;
//TODO: insert return statement here
}

问题如下:
1. 我标记的while循环是死循环
2. 第2处的table_Name始终为“sysallocunits”,第3处的table_Type始终为“SYSTEM TABLE”。

已知: 数据库里面有一张很简单的表,CADO类中有一个函数能够正确读出里面的数据,但是前提是知道表名。
------解决方案--------------------
在while循环中没有对记录集调用MoveNext。