当我使用ado访问数据库中一个binary(8)类型的自定义数据时,假设该数据所在的字段名为data_id,
我的代码如下
_vairant_t v_dataid;
BYTE dateid[8];
.......
v_dataid = pRecordSet->GetCollect("date_id");
但此时,我好像不能直接使用v_dateid,
我怎么才能把它转化成程序所能识别的数据类型呢?
比如把它转化后赋给dataid[8]

解决方案 »

  1.   

    _variant_t是VARIANT的封装类,
    其赋值可以使用强制类型转换,
    其构造函数会自动处理这些数据类型。
    例如:
    long l=222;
    ing i=100;
    _variant_t lVal(l);
    lVal = (long)i;
      

  2.   

    你的例子都是把其它类型转化成variant_t类型的,我现在是想把已得到的variant_t的值赋给我的byte[8]的变量,这样强制转化variant_t类型好像不可以。应该怎么做?
      

  3.   

    你可以试着这样:
    v_dataid.bval=pRecordSet->GetCollect("date_id");
    这样应该可以吧!
      

  4.   

    _vairant_t v_dataid;
    BYTE dateid[8];
    ------------------------->
    Change from _variant_t to Byte array:v_dataid.ChangeType(VT_BYREF|VT_UI1,NULL);
    memcpy(dateid,v_dataid.pbVal,sizeof(BYTE)*8);
      

  5.   

    try 
    {
      v_dataid.ChangeType(VT_BYREF|VT_UI1,NULL);
      memcpy(dateid,v_dataid.pbVal,sizeof(BYTE)*8); 
    }
    catch(_com_error ce)
    {
      const char* msg = ce.ErrorMessage();
    }
    在运行到.ChangeType那一句就会异常抛出,
    我在catch中接收到改异常,发现错误提示msg= "未知界面。"