VC中使用ADO来删除数据库中的数据时出现的有关问题

VC中使用ADO来删除数据库中的数据时出现的问题
void CMyDlgAdd::OnButtonDelete() 
{
// TODO: Add your control notification handler code here
::CoInitialize(NULL);//初始化com环境
_ConnectionPtr m_pConnection;//定义连接指针变量
_RecordsetPtr m_pRecordset;//定义数据集指针变量

//添加控件通知处理程序代码
m_pConnection.CreateInstance(_uuidof(Connection));//创建一个Connection对象实例
m_pConnection->Open("Provider=SQLNCLI10.1;server=111-2CEFF0D99CA;UID=sa;PWD=891213;database=sjk",
"","",adModeUnknown);
CString sql;
sql=_T("select * from Sheet1$");         
m_pRecordset.CreateInstance(_uuidof(Recordset));
    try
{
CString name;
CString str;
_variant_t vUsername;
m_pRecordset->Open((_bstr_t)sql,m_pConnection.GetInterfacePtr(),adOpenDynamic,
adLockOptimistic,adCmdText);//执行SQL得到记录集
m_pRecordset->MoveFirst();
while(1)
{
vUsername = m_pRecordset-> GetCollect( "姓名");
str=(LPCTSTR)(_bstr_t)vUsername;//将_variant_t类型转换成CString类型
if(str=="")
{
MessageBox("没有该记录!");
break;
}
 
    m_name.GetWindowText(name);
            if (str==name)//在数据库中是否存在,不存在则指向下一行
{   
                m_pRecordset->Delete(adAffectCurrent);
m_pRecordset->MoveFirst();
}
    else 
{
              m_pRecordset->MoveNext();
}
}
        m_pRecordset->Update();
}

catch (_com_error e) 
{
        MessageBox(e.Description());
}
MessageBox("删除成功");
}
编译的时候没有错,但是运行的时候或出现“BOF 或 EOF 中有一个是“真”,或者当前的记录已被删除”或者
Row Handle Referred to a Deleted Row or Row Marked for Deletion (不一定出现哪个。。。)。但是!数据时可以被删除的。
这是怎么回事呢?
------解决方案--------------------

if(str.GetLenght()==0) 
{
MessageBox("没有该记录!");
break;
};