_variant_t和_bstr_t


_variant_t和_bstr_t這兩個類分別封裝並管理VARIANT和BSTR這兩種數據類型,

VARIANT和BSTR這兩種類型是COM中使用的數據類型。

 

實現_variant_t向int,String ,double,long,byte等類型轉換

 

為了C++中的變量應用到ADO編程中,只能進行數據類型的轉換。
通過_variant_t和_bstr_t這兩個類,就可

_variant_t var;
var=m_pRecordset->GetCollect ("UserName");
ss=(TCHAR*)(_bstr_t)vUsername;//轉換成字符串

 

以方便的把C++類型變量轉換成COM中的變量了。

 

CString轉換為_variant_t:

CString str = _T("xxx");
_variant_t var = (LPCTSTR)str;

把CString 轉換為_variant_t:

整型:(long) (_variant_t) m_pRecordset->GetFieldByName("XX");
字符串型:(m_pRecordset->GetFieldByName("XX")).bstrVal;

把一個日期字符串轉成_variant_t:

1.CString可以直接轉_variant_t。 
CString szTime("2008-8-8 08:08:08");
_variant_t  mt = szTime;
2._variant_t轉CString用如下函數:
CString VariantToCString(_variant_t var)
{
    
    CString str; //轉換以后的字符串
    
    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(".6f",(double)var.fltVal);
        
        break;
case VT_R8: //var is double type
        
        str.Format(".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) ?L"FALSE": L"TRUE";
        
        break;
default:
        
        str.Format("Unk type %d\n",var.vt);
        
        TRACE("Unknown type %d\n",var.vt);
        
    }
    
    return str;
    
}

把一個int轉換為_variant_t類型:

int a = 5;
 _variant_t var;
 
 var = (_variant_t)(long)a;

 

 


 

 

     UpdateData();
        CString strCmd = L"select * from n where 材料='";
        strCmd += m_Querymaterial;
        strCmd += "'";
        m_pRecordset = m_pConnection->Execute(_bstr_t(strCmd), &RecordsAffected, adCmdText);

 

 

 

_variant_t vM,vN;
    try
    {
        while(!m_pRecordset->adoEOF)
        {
            //取得第0列的值,從0開始計數
            vM=m_pRecordset->GetCollect(_variant_t((long)0));
            //取得“折射率”這一列的值
            vN=m_pRecordset->GetCollect("折射率");
            CString strtemp;
            if (vM.vt!=VT_NULL)  
            {  
                strtemp.Format(_T("%s"),vM.lVal);  
            }
            if (vN.vt!=VT_NULL)
            {
                strtemp+=" ";
                strtemp+=(LPCTSTR)(_bstr_t)vN;
            }
            m_list1.AddString(strtemp);  
            m_list1.AddString(_T("\n"));
            m_pRecordset->MoveNext();//移動到下一條記錄
        }
    }
    catch(_com_error &e)  
    {  
        AfxMessageBox(e.Description());
        return;
    }  
    if (m_pRecordset->Close())
    {
        m_pRecordset->Close();
        m_pRecordset=NULL;
    } 
    if (m_pConnection->State)
    {
        m_pConnection->Close();
        m_pConnection=NULL;
    }
}

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM