void cusers::getdata(CString cuid)
{
fado fa;
fa.oninitadoc(); _bstr_t vsql;
vsql="SELECT * FROM users WHERE userid="+cuid; _RecordsetPtr mrst;
mrst=fa.getrst(vsql);
//cout<<cuid;
if(mrst->adoEOF==1)
cusers();
else
{
   
        uid=atoi((_bstr_t)cuid);
uname=(LPCTSTR)(_bstr_t)mrst->GetCollect("username");
upwd=(LPCTSTR)(_bstr_t)mrst->GetCollect("userpwd");
cout<<uid<<endl;  
cout<<uname<<endl;
cout<<upwd;
}
fa.exitcon();
}uname和upwd为CString变量,为什么我输出的数据是数字而不是字符串?数据库中的数据是字符串。

解决方案 »

  1.   

    用这个试试
    uname=(LPCTSTR)(_bstr_t)(mrst->Fields->GetItem(_variant_t("username"))->Value);
      

  2.   

    你的通过一个中间变量定义的
    _variant_t varuname,varupwd;
    varuname = mrst->Fields->GetItem(_variant_t("username"))->Value;
    ........
      

  3.   

    uname = (LPCTSTR)_bstr_t(varuname);这样就好了~
      

  4.   

    当然为了安全
    你可以判断一下取得的是否为空
    if(varuname.vt!=VT_NULL)
    {
    uname = (LPCTSTR)_bstr_t(varuname); 
    ........
    }
    推荐你看看《ADO开发指南》。。
      

  5.   

    不知道你的fado是什么,不过你可以把vsql变量 中的字符串拷贝出来,放到数据库执行看看结果是不是对的??
      

  6.   

    哦,fado是一个连接数据库的类,这个语句在执行语句的时候没有问题,结果也能出来。在我写的另一个程序中结果没什么错误,但是在这个里面就不行,语句只是变了一点,结果就出不来了我另一个程序这部分的代码是
                      var = pRst->GetCollect("userid");
    if(var.vt != VT_NULL)
    cout<<"姓名:"<<(LPCTSTR)(_bstr_t)var<<"    ";
    var =pRst->GetCollect("username");
    if(var.vt != VT_NULL)
    cout<<"密码"<<(LPCTSTR)(_bstr_t)var<<endl;
    pRst->MoveNext();
      

  7.   

    可能是那个fado类有问题,你在这个程序里面也用另一种方法试试:
    _RecordsetPtr mrst;CoInitialize(NULL);
    mrst.CreateInstance(__uuidof(Recordset));_bstr_t vsql; 
    vsql="SELECT * FROM users WHERE userid="+cuid;
    mrst>Open(vsql,_variant_t((IDispatch*)m_pConn,true),
    adOpenStatic,adLockOptimistic,adCmdText);if(mrst->adoEOF==1) 
    cusers(); 
    else 

      
            uid=atoi((_bstr_t)cuid); 
    uname=(LPCTSTR)(_bstr_t)mrst->GetCollect("username"); 
    upwd=(LPCTSTR)(_bstr_t)mrst->GetCollect("userpwd"); 
    cout <<uid <<endl;  
    cout <<uname <<endl; 
    cout <<upwd; 
      

  8.   


    我的类是这么写的
    void fado::oninitadoc()
    {
    ::CoInitialize(NULL);

    try
    {
    mcon.CreateInstance("ADODB.Connection");

    _bstr_t strcon="Provider=SQLOLEDB.1;Password=123456;Persist Security Info=True;User ID=Gavin;Initial Catalog=userman;Data Source=GAVIN\\SQLEXPRESS";

    mcon->Open(strcon,"","",adModeUnknown);
    }
    catch(_com_error &e)
    {


    cout<<e.Description();
    //MessageBox(e.Description());
    }

    }_RecordsetPtr& fado::getrst(_bstr_t bstrsql)
    {
    try
    {
    if(mcon==NULL)
    oninitadoc();

    mrst.CreateInstance(__uuidof(Recordset));
    mrst->Open(bstrsql,mcon.GetInterfacePtr(),adOpenDynamic,adLockOptimistic,adCmdText);
    }
    catch(_com_error e)
    {
    cout<<e.Description()<<endl;
    //AfxMessageBox(e.Description());
    } return mrst;
    }BOOL fado::exesql(_bstr_t bstrsql)
    {
    _variant_t RecordsAffected;
    try
    {
    if(mcon==NULL)
    oninitadoc();
    mcon->Execute(bstrsql,NULL,adCmdText);
    return true;
    }
    catch(_com_error e)
    {
    cout<<e.Description()<<endl;
    //AfxMessageBox(e.Description());
    return false;
    }
    }void fado::exitcon()
    {
    if(mrst!=NULL)
    mrst->Close();
    mcon->Close(); ::CoUninitialize();
    }感觉这里面好像没有什么问题。还有用你上面的方法,捕捉到的异常是"连接无法用于执行此操作。在此上下文中它可能已被关闭或无效"。不能是我连接那个地方出了问题吧??
      

  9.   

    你在getrst函数里面直接把mrst记录集里面的数据打印出来看看有没有问题??
      

  10.   

    传进来的bstrsql参数内容是正确的吗,直接写查询语句试试??
    把mrst->Open(bstrsql,mcon.GetInterfacePtr(),adOpenDynamic,adLockOptimistic,adCmdText); 
    你改成如下试试:
    mrst->Open("select * from 表名",_variant_t((IDispatch*)mcon,true),
    adOpenStatic,adLockOptimistic,adCmdText);
      

  11.   


    我是把“select * from users”作为参数给写到程序里的,这种和你那种做法得出的结果是一样的,我的程序都已经贴出来了,还能是哪里出的问题呢?连接数据库语句没有报任何错误,这样是不是就说明已经通过了呢?
      

  12.   


    请问您的QQ或者MSN是多少?这个问题需要赶快解决,通过CSDN速度有点慢,谢谢
      

  13.   

    用CSDN的消息功能吧,我给你发了消息..