VC连SQL Server找到就Messagebox(数据库已经连上).小弟初学数据库编程,上面压得紧..帮忙!!!!数据库已经连上,就是查询一下又没有值.有就返回AfxMessageBox(str)...函数退出时Debug有错误,Release没事.查询不存在的值时错误,查询存在的值时没事..../////////////////////////////////////////////////////////////////////////////////
void CUser::SelectData()
{
 _RecordsetPtr rs; //MSDN 还找不到这东西_RecordsetPtr
_bstr_t bt;
HRESULT hr;
CString str;

bt=(_bstr_t)"SELECT * FROM D_USER WHERE USER_NAME = 'oioi' and USER_PASS = '0000'";
try{
hr=rs.CreateInstance (__uuidof(Recordset));
ASSERT(SUCCEEDED(hr));
//打开数据源
hr=rs->Open (bt,cn.GetInterfacePtr(),adOpenDynamic,adLockOptimistic,adCmdText);
ASSERT(SUCCEEDED(hr));

rs->MoveFirst();//不会改...............
while( !rs->EndOfFile )
{
str=(char*)(_bstr_t)rs->Fields->GetItem("USER_NAME")->Value;
AfxMessageBox(str);
rs->MoveNext();
}

rs->Close();
}
catch(_com_error )
{
}
}

解决方案 »

  1.   

    MSDN 里找RecordsetPtr不存在的时候,记录集返回为0,执行rs->MoveFirst()会产生错误,注释掉rs->MoveFirst()看看
      

  2.   

    如果为空下面就已经异常了....
    str=(char*)(_bstr_t)rs->Fields->GetItem("USER_NAME")->Value;有谁会的能不能详细点....
      

  3.   

    //我这样搞的
    void CUser::SelectData()
    {
    _RecordsetPtr rs;
    _bstr_t bt;
    HRESULT hr;
    CString str; bt=(_bstr_t)"SELECT * FROM D_USER WHERE USER_NAME = 'はるおくん' and USER_PASS = '0000'";
     try{
    hr=rs.CreateInstance (__uuidof(Recordset));
    ASSERT(SUCCEEDED(hr));
    //打开数据源
    hr=rs->Open (bt,cn.GetInterfacePtr (),adOpenDynamic,adLockOptimistic,adCmdText);
    ASSERT(SUCCEEDED(hr));

    if ( !rs->BOF )
    {
      str=(char*)(_bstr_t)rs->Fields->GetItem("USER_NAME")->Value;
      str+= "---";
      str+=(char*)(_bstr_t)rs->Fields->GetItem("USER_PASS")->Value;
      AfxMessageBox(str);
    }
    else
    AfxMessageBox("NULL");
     
    rs->Close();
     }
      catch(_com_error  *e)
    {
    AfxMessageBox(e->ErrorMessage());
    }
    }