1。在执行的SQL语句一般都是_bstr_t
2.Connection 中的RecordsAffected 为VARIANT
3.使用get_Value()获得的记录的值为 VAARIANT
等等。。。
_bstr_t 中记录了字符串的长度,
_variant_t 记录有数据的类型和数据的值
如 _variant_t ttt;
ttt.vt=I4_VT; 表示数据类型为整数
ttt.lVal 为数据的值
/*
将?_variant_t 类?型?的?变?量?,?转?换?成?字?符?串?(?比?如?如?果?是?数?字?,?则?转?换?成?数?字?对?应?的?字?符?串?:?如?10.2 -> "10.200000")?
*/
_variant_t var;
CString str; //转?换?以?后?的?字?符?串?
//以?下?代?码?演?示?如?何?转?换?为?C标?准?字?符?串?型?
if (var.vt == VT_I4)
{
long lNum;
char szCh[21];
str=var.bstrVal;
WideCharToMultiByte
(CP_ACP, 0, var.bstrVal, -1,
szCh, sizeof(szCh), NULL, NULL);
}
//以?下?代?码?演?示?如?何?转?换?成?逻?辑?型?
if( var.vt == VT_BOOL)
{
BOOL bVar;
lNum=var.lVal;
bVar= var.boolVar==0? FALSE : TRUE;
}
//以?下?代?码?演?示?为?其?余?类?型?(?补?充?)?
switch(var.vt)
{
case VT_BSTR: //var is BSTR type
str=var.bstrVal;
break;
case VT_I2: //var is short int type
str.Format("%d",(int)var.iVal);
break;
case VT_I4: //var is long int type
str.Format("%d",var.lVal);
break;
case VT_R4: //var is float type
str.Format("%10.6f",(double)var.fltVal);
break;
case VT_R8: //var is double type
str.Format("%10.6f",var.dblVal);
break;
case VT_CY: //var is CY type
str=COleCurrency(var).Format();
break;
case VT_DATE: //var is DATE type
str=COleDateTime(var).Format();
break;
case VT_BOOL: //var is VARIANT_BOOL
str= (var.boolVal==0) ?"FALSE": "TRUE";
break;
default:
str.Format("Unk type %d\n",var.vt);
TRACE("Unknown type %d\n",var.vt);
}