使用ADO操作数据库时一个好用的VARIANT类!

王朝vc·作者佚名  2006-01-08
窄屏简体版  字體: |||超大  

[url=file://将/][/url]

inline CString VTOCSTR(VARIANT *v)

{

if(v->vt==VT_BSTR)

{

CString str((LPCWSTR)v->bstrVal);

return str;

}

else

{

return CString("");

}

}

#define VTOLONG(v) ((v).vt==VT_I4 ? (LONG)(v).lVal:0L)

#define VTODATE(v) ((v).vt==VT_DATE ? (CTime)(v).iVal:0L)

class CVar : public VARIANT

{

public:

CVar()

{

VariantInit(this);

}

CVar(VARTYPE vt, SCODE scode = 0)

{

VariantInit(this);

this->vt = vt;

this->scode = scode;

}

CVar(VARIANT var)

{

*this = var;

}

~CVar()

{

VariantClear(this);

}

// ASSIGNMENT OPS.

CVar & operator=(PCWSTR pcwstr)

{

VariantClear(this);

if (NULL == (this->bstrVal = SysAllocStringLen(pcwstr, wcslen(pcwstr))))

throw E_OUTOFMEMORY;

this->vt = VT_BSTR;

return *this;

}

CVar & operator=(VARIANT var)

{

HRESULT hr;

VariantClear(this);

if (FAILED(hr = VariantCopy(this, &var)))

throw hr;

return *this;

}

.

operator STR() const

{

if(VT_BSTR == this->vt)

return this->bstrVal;

else

return NULL;

}

operator LONG() const

{

if (VT_I4 == this->vt)

return this->lVal;

else

return NULL;

}

operator DATE() const

{

if (VT_DATE == this->vt)

return this->date;

else

return NULL;

}

operator CY() const

{

COleCurrency cyNULL;

cyNULL.SetCurrency(0,0);

if (VT_CY == this->vt)

return this->cyVal;

else

return cyNULL;

}

HRESULT Clear()

{

return VariantClear(this);

}

};

这是我在MSDN中整理并曾强的一个类,希望对进行ADO操作数据库的伙计们有所帮助!

 
 
 
免责声明:本文为网络用户发布,其观点仅代表作者个人观点,与本站无关,本站仅提供信息存储服务。文中陈述内容未经本站证实,其真实性、完整性、及时性本站不作任何保证或承诺,请读者仅作参考,并请自行核实相关内容。
 
 
© 2005- 王朝網路 版權所有 導航