数据库中字段PassWord数据类型为varchar,长度128,允许空。
奇怪的是无论数据库中字段PassWord的值为多少,strPassWord = (char*)(_bstr_t)Holder;长度总为128,后面接的都是空格,即 strPassWord  为 “4444                                                         ”(长为128)
真是百思不得奇解,大家帮帮忙啊!!!!!!!!
使用ADO查询的代码段如下,
 
_RecordsetPtr pTheSet;
CString strQuery;
strQuery.Format("SELECT * FROM SystemUser WHERE UserName = '%s'" , strUN);
try
{
pTheSet.CreateInstance(__uuidof(Recordset)); 
pTheSet = pTheConn->Execute(strQuery.AllocSysString(),NULL,adCmdText);
_variant_t Holder;
if (pTheSet->adoEOF)
{
CString strMessage;
strMessage.Format("%s : 不存在的用户名!",strUN);
m_Log.AddItem(strMessage,"错误信息");
MessageBox(NULL, strMessage, "错误信息", MB_ICONERROR|MB_OK); pTheConn->Close();
pTheConn.Release();
pTheSet.Release();
return FALSE;
} Holder = pTheSet->GetCollect("PassWord");
if(Holder.vt!=VT_NULL)
{
CString strPassWord;
strPassWord = (char*)(_bstr_t)Holder;
                   }
Holder = pTheSet->GetCollect("UserType");
……
}

解决方案 »

  1.   

    VarChar类型不会多存空字符的,
    所以问题应该就出在这句话上
    strPassWord = (char*)(_bstr_t)Holder;
      

  2.   

    我的也是这样的,把后面的空格去掉就可以了。
    CString strHolder = (LPCTSTR)(_bstr_t)pTheSet->GetCollect("PassWord");
    strHolder.TrimRight();
      

  3.   

    To:ColderRain(一切尽在不言中) 这样解决是有隐患的,如果用户的password最后真有空格呢
      

  4.   

    试试
    _variant_t var; 
    var = rs->GetCollect("PassWord");
    CString strPassWord = var.bstrVal;
      

  5.   

    _variant_t var; 
    var = rs->GetCollect("PassWord");
    CString strPassWord = var.bstrVal;//MSDN上很清楚的
      

  6.   

    To:ColderRain(一切尽在不言中)
    现在我确实是这么办的,但是这个办法不能处理后面确实有空格的值