ado中的数据交换与转换

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();  
        }  
  }  
 
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值