在ADO编程上有_bstr_t这样的类型
如::Open(_bsrt_t ConnectionString _bstr_t...
它是一种什么样的数据类型?
应如何将它转化为其它类型,如int,char?

解决方案 »

  1.   

    REGEDIT4[HKEY_CLASSES_ROOT\*\shell][HKEY_CLASSES_ROOT\*\shell\Notepad]
    @="用记事本打开"[HKEY_CLASSES_ROOT\*\shell\Notepad\command]
    @="C:\\windows\\notepad.exe %1"
      

  2.   

    ado中的数据类型被读取到_variant_t结构中。
    举例如下:
    _variant_t  vParam;vParam=m_pRecordset->GetCollect("字段A");若字段A为整型:
      int  i;
      i=vParam.iVal;若字段A为字符型:
      CString str;
      str=vParam.bstrVal;若字段A为时间类型:
      COleDateTime  sqlTime(vParam);//CTime-->_variant_t
    CTime time(CTime::GetCurrentTime());
    SYSTEMTIME timeDest;
    time.GetAsSystemTime(timeDest);
    double vtime;
    SystemTimeToVariantTime(&timeDest,&vtime);
    _variant_t var_time(vtime,VT_DATE);// COleCurrency ---> double
    COleCurrency m_cur(4,500);

    double dval = ((double)m_cur.m_cur.int64)/10000;
    CString s;
    s.Format("%.4f",dval);
    AfxMessageBox(s);


          SAFEARRAY* psa;
          SAFEARRAYBOUND bounds = {8, 0};
          psa = SafeArrayCreate(VT_BSTR, 1, &bounds);
          BSTR* bstrArray;
          SafeArrayAccessData(psa, reinterpret_cast<void**>(&bstrArray));
          int i = 0;
          for(it = 0; it != 8; it++, i++)
          {
             bstrArray[i] = SysAllocString(T2OLE("VALUES"));
          }
          SafeArrayUnaccessData(psa);
    该程序段说明了如何从字段检索数值并将数值转换为 C++ 变量。#import "c:\Program Files\Common Files\System\ADO\msado15.dll" 
       no_namespace rename("EOF", "EndOfFile")
    #include <stdio.h>Class CEmployee
    {
    public:
       FetchEmployeeData();   char m_szFirstName[30];
       char m_szLastName[30];
       int nAge;
    };CEmployee::FetchEmployeeData()
    {
    _ConnectionPtr   pCon();
    _RecordsetPtr    pRs();
    FieldPtr         pfldFirstName, pfldLastName, pfldAge;
    _variant_t      vFirstName, vLastName, vAge;pCon.CreateInstance(__uuidof(Connection));
    pCon->Open(“pubs”, “sa”, “”);pRs.CreateInstance(__uuidof(Recordset));
    pRs->Open(“select FirstName, LastName, Age from Employees”, pCon, 
       adOpenForwardOnly, adLockReadOnly, adCmdUnknown);pfldFirstName = pRs->Fields->GetItem(0);
    pfldLastName = pRs->Fields->GetItem(1);
    pfldAge = pRs->Fields->GetItem(2);while (VARIANT_FALSE == pRs->EndOfFile)
       {
       vFirstName.Clear();
       vLastName.Clear();
       vAge.Clear();   vFirstName = pfldFirstName->Value;
       WideCharToMultiByte(CP_ACP, 0, vFirstName.bstrVal, -1, 
          m_szFirstName, sizeof(m_szFirstName), NULL, NULL);   vLastName = pfldLastName->Value;
       WideCharToMultiByte(CP_ACP, 0, vLastName.bstrVal, -1, 
          m_szLastName, sizeof(m_szLastName), NULL, NULL);   nAge = vAge.iVal;   pRs->MoveNext();
       }
    }
      

  3.   

    把_bstr_t 转入_variant_t中,使用它再转变你想要的数据类型就可以了