使用ADO操作数据库时一个好用的VARIANT类!
?
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操作數據庫的伙計們有所幫助!
轉載于:https://www.cnblogs.com/xiaowangba/archive/2002/05/02/6314620.html
總結
以上是生活随笔為你收集整理的使用ADO操作数据库时一个好用的VARIANT类!的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: Dataguru培训优惠码 分享
- 下一篇: 一个监测IIS,并定时重新启动的程序。