16,549
社区成员




enum VARENUM
{ VT_EMPTY = 0,
VT_NULL = 1,
VT_I2 = 2,
VT_I4 = 3,
VT_R4 = 4,
VT_R8 = 5,
VT_CY = 6,
VT_DATE = 7,
VT_BSTR = 8,
VT_DISPATCH = 9,
VT_ERROR = 10,
VT_BOOL = 11,
VT_VARIANT = 12,
VT_UNKNOWN = 13,
VT_DECIMAL = 14,
VT_I1 = 16,
VT_UI1 = 17,
VT_UI2 = 18,
VT_UI4 = 19,
VT_I8 = 20,
VT_UI8 = 21,
VT_INT = 22,
VT_UINT = 23,
VT_VOID = 24,
VT_HRESULT = 25,
VT_PTR = 26,
VT_SAFEARRAY = 27,
VT_CARRAY = 28,
VT_USERDEFINED = 29,
VT_LPSTR = 30,
VT_LPWSTR = 31,
VT_RECORD = 36,
VT_INT_PTR = 37,
VT_UINT_PTR = 38,
VT_FILETIME = 64,
VT_BLOB = 65,
VT_STREAM = 66,
VT_STORAGE = 67,
VT_STREAMED_OBJECT = 68,
VT_STORED_OBJECT = 69,
VT_BLOB_OBJECT = 70,
VT_CF = 71,
VT_CLSID = 72,
VT_VERSIONED_STREAM = 73,
VT_BSTR_BLOB = 0xfff,
VT_VECTOR = 0x1000,
VT_ARRAY = 0x2000,
VT_BYREF = 0x4000,
VT_RESERVED = 0x8000,
VT_ILLEGAL = 0xffff,
VT_ILLEGALMASKED = 0xfff,
VT_TYPEMASK = 0xfff
} ;
string CAdoConnection::VariantToString(const _variant_t &var)
{
string strValue;
TCHAR szValue[1024] = {0x00};
switch (var.vt)
{
case VT_BSTR://字符串
case VT_LPSTR://字符串
case VT_LPWSTR://字符串
strValue = (LPCTSTR)(_bstr_t)var;
break;
case VT_I1:
case VT_UI1:
_stprintf(szValue, _T("%d"), var.bVal);
strValue = szValue;
break;
case VT_I2://短整型
_stprintf(szValue, _T("%d"), var.iVal);
strValue = szValue;
break;
case VT_UI2://无符号短整型
_stprintf(szValue, _T("%d"), var.uiVal);
strValue = szValue;
break;
case VT_INT://整型
_stprintf(szValue, _T("%d"), var.intVal);
strValue = szValue;
break;
case VT_I4: //整型
_stprintf(szValue, _T("%d"), var.lVal);
strValue = szValue;
break;
case VT_I8: //长整型
_stprintf(szValue, _T("%ld"), var.bVal);
strValue = szValue;
break;
case VT_UINT://无符号整型
_stprintf(szValue, _T("%u"), var.uintVal);
strValue = szValue;
break;
case VT_UI4: //无符号整型
_stprintf(szValue, _T("%u"), var.ulVal);
strValue = szValue;
break;
case VT_UI8: //无符号长整型
_stprintf(szValue, _T("%u"), var.ulVal);
strValue = szValue;
break;
case VT_VOID:
_stprintf(szValue, _T("%8x"), (unsigned int)var.byref);
strValue = szValue;
break;
case VT_R4://浮点型
_stprintf(szValue, _T("%.4f"), var.fltVal);
strValue = szValue;
break;
case VT_R8://双精度型
_stprintf(szValue, _T("%.8f"), var.dblVal);
strValue = szValue;
break;
case VT_DECIMAL: //小数
_stprintf(szValue, _T("%.8f"), (double)var);
strValue = szValue;
break;
case VT_CY:
{
COleCurrency cy = var.cyVal;
strValue = cy.Format();
}
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: //日期型
{
DATE dt = var.date;
COleDateTime da = COleDateTime(dt);
strValue = da.Format("%Y-%m-%d %H:%M:%S");
}
break;
case VT_NULL://NULL值
strValue = "VT_NULL";
break;
case VT_EMPTY://空
strValue = "";
break;
case VT_UNKNOWN://未知类型
default:
strValue = "UN_KNOWN";
break;
}
return strValue;
}