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

    技术2022-05-11  79

     

    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操作数据库的伙计们有所帮助!


    最新回复(0)