vc 中如何读取sql下面image类型的二进制字段值,并将其转化为CString类型,显示在编辑框中? 
请各位多多帮忙!

解决方案 »

  1.   

    main(){
        CString x;
        char buf[256] = "ADFRGfdhgdfhsdfh";
        char s[3];    x.Empty();    for ( int i = 0; i < strlen(buf); i++ )
        {
            sprintf(s,"%x", buf[i]);
            x = x + s + " "; 
        }    return 0;
    }
    輸出和排格式自己做吧
      

  2.   

    先用ado recordset的get_Chuncate(写错了哦)获取数据流,为一个variant变量,然后取出variant的blob数据,再转成文本
      

  3.   

    谢谢楼上的!本人是初学者,对这些知识还很欠缺,希望详细的指点。
    看了您的回复,还是不太清楚,可以具体一点吗?get_Chuncate怎么用,还有那个blob数据是什么,然后又怎么转化成文本,最好帖一些代码出来...谢谢!!!
      

  4.   

    写一个你试试,注:不支持UNICODE
    bool BinaryToString( FieldPtr sp, CString& rStr )
    {
        if( sp == NULL ) return false;
        long attr = sp->Attributes;
        if( (attr & adFldLong) != adFldLong) return false;//不是BLOB字段
        if( sp->ActualSize <= 0 ){
         rStr = "";
         return true;//0长度数据
        }
        _variant_t  v = sp->GetChunk( sp->ActualSize); //全部数据
        if( v.vt != (VT_UI1|VT_ARRAY)) return false;// BLOB肯定是这类型.
        SAFEARRAY * psa = vt.parray;
        if( psa == NULL ) return false;//
        UINT  len = ::SafeArrayGetElementSize(psa); 
        BYTE*  bp =(BYTE*) rStr.GetBuffer(len+1);
        for(UINT i = 0; i < len; i++)
        {
          if( FAILED(SafeArrayGetElement( psa, &i, bp++ )))break;
        }
        *(lp+len) = 0;
        return true;
    }
    //
    //
    你也可以试试用 _variant_t.ChangeType(VT_BSTR)转换.