用ADO操作SQL,读取表的数据的时候,int型 的数据总是显示不正确,显示的根本不是数据。我用SQL Server Management Studio查看,数据是正确的。读取字符型的数据时,可以用
_variant_t vName;
vID=m_pRecordset->GetCollect("Name");
m_Name=(CString)(vName.intVal);读取。其中,m_Name是和一个编辑框关联的 CString类型的变量。但int型的这样读就出错了。请问各路大虾,各种数据读法、转化方法都一样吗?不一样的话分别怎么转化啊?
_variant_t vName;
vID=m_pRecordset->GetCollect("Name");
m_Name=(CString)(vName.intVal);读取。其中,m_Name是和一个编辑框关联的 CString类型的变量。但int型的这样读就出错了。请问各路大虾,各种数据读法、转化方法都一样吗?不一样的话分别怎么转化啊?
std::string vartostr(const _variant_t &var)
{
try
{
std::string strValue;
std::ostringstream os;
switch (var.vt)
{
case VT_BSTR://字符串
case VT_LPSTR://字符串
case VT_LPWSTR://字符串
strValue = (LPCTSTR)(_bstr_t)var;
break;
case VT_I1:
case VT_UI1:
os.operator <<(var.bVal);
strValue = os.str();
break;
case VT_I2://短整型
os.operator <<(var.iVal);
strValue = os.str();
break;
case VT_UI2://无符号短整型
os.operator <<(var.uiVal);
strValue = os.str();
break;
case VT_INT://整型
os.operator <<(var.intVal);
strValue = os.str();
break;
case VT_I4: //整型
os.operator <<(var.lVal);
strValue = os.str();
break;
case VT_I8: //长整型
os.operator <<(var.lVal);
strValue = os.str();
break;
case VT_UINT://无符号整型
os.operator <<(var.uintVal);
strValue = os.str();
break;
case VT_UI4: //无符号整型
os.operator <<(var.ulVal);
strValue = os.str();
break;
case VT_UI8: //无符号长整型
os.operator <<(var.ulVal);
strValue = os.str();
break;
case VT_VOID:
os.operator <<(var.byref);
strValue = os.str();
break;
case VT_R4://浮点型
os.operator <<(var.fltVal);
strValue = os.str();
break;
case VT_R8://双精度型
os.operator <<(var.dblVal);
strValue = os.str();
break;
case VT_DECIMAL: //小数
os.operator <<((double)var);
strValue = os.str();
break;
case VT_CY:
strValue = (char* )(_bstr_t)var;
break;
case VT_BLOB:
case VT_BLOB_OBJECT:
case 0x2011:
strValue = "[BLOB]";
break;
case VT_BOOL://布尔型
strValue = var.boolVal ? "true" : "false";
break;
case VT_DATE: //日期型
strValue = (char* )(_bstr_t)var;
break;
case VT_NULL://NULL值
strValue = "";
break;
case VT_EMPTY://空
strValue = "";
break;
case VT_UNKNOWN://未知类型
default:
strValue = "UN_KNOW";
break;
}
return strValue;
}
catch (...)
{
return "EXCEPTION";
}
}然后再根据你的实例代码,可以写成:
_variant_t vName;
vName = m_pRecordset->GetCollect("Name");
m_Name = vartostr(vName).c_str();