数据库中字段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");
……
}
奇怪的是无论数据库中字段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");
……
}
所以问题应该就出在这句话上
strPassWord = (char*)(_bstr_t)Holder;
CString strHolder = (LPCTSTR)(_bstr_t)pTheSet->GetCollect("PassWord");
strHolder.TrimRight();
_variant_t var;
var = rs->GetCollect("PassWord");
CString strPassWord = var.bstrVal;
var = rs->GetCollect("PassWord");
CString strPassWord = var.bstrVal;//MSDN上很清楚的
现在我确实是这么办的,但是这个办法不能处理后面确实有空格的值